
PHP静的アプリケーションセキュリティテスト(SAST)ツール。カスタマイズ可能なルールと設定を使用して、XSS、SQLインジェクション、その他の脆弱性を検出するための汚染解析を実行します。
chmod +x progpilot_vX.Y.Z.phar
sudo mv progpilot_vX.Y.Z.phar /usr/local/bin/progpilot
docker build -t progpilot .
docker run -v $(pwd):/workspace progpilot /workspace/path/to/your/file.php
phar-composer.phar は、$PATH 環境変数にリストされているディレクトリに配置する必要があります:
git clone https://github.com/designsecurity/progpilot
cd progpilot
./build.sh
生成されたpharアーカイブは、このプロジェクトのルートにある builds フォルダに配置されます。
composer でパッケージをインストールします。これは通常、PHPプロジェクトのライブラリとしてprogpilotを使用する場合に該当します:
composer require --dev designsecurity/progpilot
yaml設定ファイルを使用して(この例を参照)、progpilot解析を設定およびカスタマイズします。そうしない場合、デフォルト設定が使用されます。特に標準の taint設定データ が適用されます。
progpilotコマンドは、分析するファイルおよびフォルダへのパスと、オプションで設定ファイルを引数として受け取ります:
# 設定ファイルなし
progpilot example1.php example2.php folder1/ folder2/
# 設定ファイルあり
progpilot --configuration configuration.yml example1.php example2.php folder1/ folder2/
composer でインストールした場合、プログラムは vendor/bin/progpilot に配置されます。
progpilotをPHPコード内で使用することも可能です。詳細は APIドキュメント を参照してください。
以下のコードを使用して source_code1.php を分析します:
<?php
require_once './vendor/autoload.php';
$context = new \progpilot\Context;
$analyzer = new \progpilot\Analyzer;
$context->inputs->setFile("source_code1.php");
try {
$analyzer->run($context);
} catch (Exception $e) {
echo "Exception : ".$e->getMessage()."\n";
}
$results = $context->outputs->getResults();
var_dump($results);
source_code1.php に次のコードが含まれている場合:
<?php
$var7 = $_GET["p"];
$var4 = $var7;
echo "$var4";
簡略化された 出力 は次のようになります:
array(1) {
[0]=>
array(11) {
["source_name"]=>
array(1) {
[0]=>
string(5) "$var4"
}
["source_line"]=>
array(1) {
[0]=>
int(4)
}
["sink_name"]=>
string(4) "echo"
["sink_line"]=>
int(5)
["vuln_name"]=>
string(3) "xss"
}
}
この例で使用されているすべてのファイル(composer.json、example1.php、source_code1.php)は projects/example フォルダにあります。 他の例については、こちらの ページ も参照してください。
分析対象のアプリケーションのコンテキストに応じて、taint分析設定(シンク、ソース、サニタイザー、バリデーターの定義)をカスタマイズすることを強くお勧めします。以下の指定では、スーパーグローバル変数 _GET、_POST、_COOKIE が信頼できないものとして定義され、さらに shell_exec() 関数の戻り値も同様です:
{
"sources": [
{"name": "_GET", "is_array": true, "language": "php"},
{"name": "_POST", "is_array": true, "language": "php"},
{"name": "_COOKIE", "is_array": true, "language": "php"},
{"name": "shell_exec", "is_function": true, "language": "php"}
]
}
利用可能な設定については、分析の指定に関する対応する章 を参照してください。
カスタムルールも作成できます。カスタムルールに関する対応する章 を参照してください。
Progpilotの開発についての詳細は こちら。