GyaanSetu PHP

PHP、Laravel、WordPress。

32 articlesDeep, practical knowledge

CoopCycleのデータ漏洩、未検証のGETエンドポイントにより数千件の顧客住所が流出

/api/stores/{id}/addresses コレクションエンドポイントにおけるセキュリティ制御の不備により、認証済みのCoopCycleユーザーがストアIDを列挙して氏名、住所、郵便番号を収集できる状態にありました。これにより、複数の協同組合においてプライバシーが侵害される事態となっています。

PHP · 3 分で読めます

PrestaShopのアンインストールにより、共有設定テーブルを介して他のモジュールの設定が消去されるリスクが判明

57個の公開PrestaShopモジュールを対象とした監査により、名前空間化されていない設定キーや Configuration::deleteByName への不注意な呼び出しが原因で、モジュールのアンインストール時に無関係な拡張機能の設定まで削除されてしまい、ショップ運営者を困惑させている実態が明らかになりました。

PHP · 4 分で読めます

Akauntingにおいて、パッチ3.2.0が適用されるまで読み取り専用ユーザーが請求書をキャンセルできる脆弱性

読み取り専用ユーザーがGETリクエストを通じて、ドキュメント化されていないmarkCancelledエンドポイントを呼び出すことができ、支払い記録の消去や監査証跡の破損を招く恐れがありました。このバグは、許可リストにステータス変更メソッドが含まれていなかったことに起因しており、バージョン3.2.0で修正されました。

PHP · 2 分で読めます

PHPワーカーを節約しCPUスパイクを防ぐために、サーバー側で wp-cron.php をブロックする

DISABLE_WP_CRON = true は、WordPress が独自のループバックリクエストを行うのを防ぐだけであり、wp-cron.php の URL は引き続きアクセス可能なままです。そのため、攻撃者による大量のリクエストによって PHP ワーカーが枯渇し、共有ホスト上でサービス拒否(DoS)を引き起こす可能性があります。

PHP · 4 分で読めます

InvoiceShelfのパッチにより、オーナーが他のテナントを乗っ取ることが可能になるスコア8.7の脆弱性が修正

この脆弱性は、Laravelのルートモデルバインディングとテナントスコープのチェック漏れに起因するもので、オーナーがいかなるユーザーIDもリクエストして認証情報を上書きできるため、被害者のアカウントを実質的に攻撃者の会社へと移動させることが可能でした。

PHP · 2 分で読めます

Magento開発者がDB呼び出しを300分の1に削減、しかし在庫切れ商品が消失

商品ごとに300回行われていたリポジトリ呼び出しを1回のコレクションクエリに置き換えることでクエリ数を劇的に削減したものの、Magentoの組み込み在庫フィルターが在庫ゼロのSKUをすべて除外してしまい、結果として顧客には不完全なカタログが表示されることとなった。

PHP · 3 分で読めます

TrendVidStream、ハッキングを受け、30日間有効なJWTから使い捨てのリフレッシュトークンへと仕様を変更

パートナー企業のSDKが30日間有効なJWTをプレーンテキストでキャッシュしていたため、海外からのリプレイ攻撃を許す事態となりました。このセキュリティ侵害を受け、TrendVidStreamは長期間有効なJWTの使用を廃止し、有効期限15分のアクセストークンと、再利用時に即座に失効する使い捨てのリフレッシュトークンへと切り替えました。

PHP · 3 分で読めます

WordPressのメール確認画面に開発者が数時間を奪われる —— 1行で解決する修正方法

WP 5.3以降、数ヶ月ごとに管理用メールの確認ページが表示されるようになり、自動実行中のPlaywrightが、表示されないボタンを待ち続けてしまう問題が発生しています。URLを素早くチェックして「I'll wait」をクリックする処理を加えるだけで、自動化の安定性を取り戻せます。

PHP · 3 分で読めます

Etcdの導入によりAPACのビデオルーティングエラーが1秒に短縮、ソウル・東京間の誤ルーティングを解消

watch、lease、CASプリミティブを活用してリージョン固有のルーティングデータをetcdへ移行したことで、全8台のルーターへの変更反映が約1秒で完了するようになりました。軽量なGo製サイドカーが設定を共有メモリに書き込む仕組みにより、PHPはゼロレイテンシでの読み取りによるリクエスト処理を実現しています。

PHP · 4 分で読めます

クロアチアの2026年電子請求書ルール、PHPアプリに62項目のバリデーションルールの書き換えを強いる

2026年1月1日より、クロアチアにおけるすべてのB2B取引はXSLT 2.0で記述されたSchematronファイルを通過する必要がありますが、PHP標準のlibxsltはXSLT 1.0までしか対応していません。請求業務を維持するため、開発者はネイティブのSaxon-C拡張機能を追加するか、外部サービスを利用するか、あるいは62項目のチェックをPHPで書き直すかの選択を迫られています。

PHP · 4 分で読めます

ESI(Edge-Side Includes)を活用し、トレンドページのロード負荷を毎分4,000クエリから50クエリ未満に削減した手法

チームはフロントページをビデオグリッド、言語スイッチャー、ライブヘッダーの3つのフラグメントに分割しました。VarnishのTTLを60秒、24時間、およびキャッシュなしに設定し、匿名部分からクッキーを削除。さらに、サロゲートキーを活用することで即時のパージを実現しました。

PHP · 3 分で読めます

動画プラットフォーム、SQLite FTS5からOpenSearchへ移行し、検索結果ゼロを10分の1に削減

SQLiteをマスターデータとして維持しつつ、階層的な関連付けとチューニングされた曖昧検索(fuzzy)設定を備えた読み取り専用のOpenSearchレプリカを構築。これにより、中央値レイテンシを28ms未満に抑えながら、検索結果ゼロの件数を10分の1に削減することに成功しました。

PHP · 3 分で読めます

SEOチームの「掲載数3件未満はnoindex」というポリシーが、カテゴリページを消失させる原因に

新しい「seo_unlocks」テーブルは、カテゴリの有効な掲載数が3件に達した瞬間を記録し、ページを恒久的にインデックス可能にします。これにより、ページがGoogleから消失し、再び検索結果に表示されるまでに数週間を要していた以前のサイクルを防ぐことができます。

PHP · 3 分で読めます

OpenSearchとSQLiteの二重インデックスにより、いかにしてラテン文字ユーザーの検索結果ゼロ問題を解決したか

クエリをまずOpenSearchのファジーなラテン文字フィールドとCJKバイグラムアナライザーにルーティングし、タイムアウト時にSQLite FTS5へフォールバックさせることで、20ミリ秒のレイテンシ上限を維持したまま、検索結果ゼロの発生率を2.1%まで削減することに成功しました。

PHP · 4 分で読めます

オブジェクトのハイドレーションは、計測してみるまでは解決済みの問題のように思える。データベースから行を取得し、配列を...

オブジェクトのハイドレーションは、実際に計測してみるまでは解決済みの問題のように思える。データベースから行を取得し、配列をオブジェクトにマッピングして、そのまま次の工程へ進む。私たちの多くは、それを単なる定型的な作業として扱っているが...

PHP · 5 分で読めます