この記事は、ハッシュ競合とサービス拒否攻撃を防ぐために PHP5.2.X パッチのメソッドを分析しています。必要に応じて、友人が参照できます。
先週、5.4 がリリースされようとしていたときに、Dmitry は突然新しい構成項目を導入しました:
ハッシュ衝突に基づく攻撃を防止するための max_input_vars ディレクティブを追加しました。防止される攻撃は「ハッシュ アルゴリズム衝突による複数実装のサービス拒否」です。
攻撃の原理は非常に単純です。現在、多くの言語は、ユーザーからの一般的に使用される POST データを含むハッシュを使用して、リクエスト ヘッダーを構築し、多数の特別な「k」値を POST に付加します。 (言語のハッシュ アルゴリズムがカスタマイズされているため)、言語の下部にある POST データを格納するハッシュ テーブルが「競合」(衝突) によりリンク リストに縮退します。
このように、データ量が十分に大きい場合、言語は計算、検索、挿入時に大量の CPU 使用率を引き起こし、それによってサービス妨害攻撃を実行する可能性があります。
PHP5.4 は、制限を追加することでそのような攻撃の影響を回避しようとします:
- max_input_vars - 受け入れられる GET/POST/COOKIE 入力変数の数を指定します (デフォルト値は 1000)。
PHP 5.2 を使用していてそのような攻撃の脅威にさらされている場合は、次のパッチを適用できます。PHP 5.3 の場合は、このパッチが既に含まれている 5.3.9 にアップグレードすることを検討できます (5.3.9 は現在 RC ステータスであるため、したがって、アップグレードしたくない場合は、このパッチを参照して自分で 5.3 用のパッチを作成することもできます):
予防方法
1. PHP src に Cd を実行します: patch -p1
パッケージは https://github.com/laruence/laruence.github.com/tree/master/php-5.2-max-input-vars でダウンロードできます