汚染分析
汚染分析は、関数またはメソッドの本体全体にわたる信頼できないユーザー入力のフローを評価するプロセスです。コードに汚染がある場合、ハッカーはこれらのコードの断片を実行して、SQL インジェクション、算術オーバーフロー、クロスサイトスクリプティング、パストラバーサルなどを引き起こす可能性があります。
汚染分析の主な目的は、予期しない入力が悪意のある方法でプログラムの実行に影響を与える可能性があるかどうかを判断することです。
汚染分析は、Qodana のバージョン 2023.1 以降の PHP 用の Qodana リンターでのみサポートされます。この機能は、Ultimate Plus ライセンスに基づいて利用できます。
使い方
汚染されたデータはソースと呼ばれますが、そのようなデータが含まれる可能性のある脆弱な関数はシンクと呼ばれます。この場合、汚染されたデータは、関数呼び出しや代入などのプロパゲーターを介してソースからシンクに移動します。
![汚染分析ダイアグラム Taint analysis diagram](https://resources.jetbrains.com/help/img/qodana/2024.1/taint-analysis.png)
このような伝播を防ぐために、Qodana for PHP インスペクションでは次のアプローチが適用されます。
データのサニタイズ、つまりデータを安全な状態に変換します。ここでは、汚染を解決するためにタグが削除されています。
<?php $taint = $_GET['some_key']; $taint = strip_tags($taint);データ検証。つまり、データが必要なパターンに準拠しているかどうかを確認します。このサンプルでは、
$email
変数の検証が有効になっています。<?php $email = $_GET['email']; if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo $email; }
汚染分析の実行
qodana.yaml
ファイルで、PhpVulnerablePathsInspection
インスペクションを分析範囲に含めます。
include:
- name: PhpVulnerablePathsInspection
あるいは、qodana.yaml
の inspections
セクションを使用することもできます。
inspections:
- inspection: PhpVulnerablePathsInspection
enabled: true