一个用于PHP的静态应用安全测试(SAST)工具
有多种选项可供选择,请选择最适合您使用场景的选项。
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 安装该包,通常是在将 progpilot 作为 PHP 项目的库时使用:
composer require --dev designsecurity/progpilot
使用 YAML 配置文件(请参阅 此示例)来配置和自定义 progpilot 分析,否则将使用默认配置,特别是标准的污点配置数据。
progpilot 命令接受待分析的文件和文件夹路径作为参数,并可选地接受一个配置文件:
# without config file
progpilot example1.php example2.php folder1/ folder2/
# with a config file
progpilot --configuration configuration.yml example1.php example2.php folder1/ folder2/
如果您使用 composer 安装,程序将位于 vendor/bin/progpilot。
也可以在 PHP 代码中使用 progpilot。更多信息请参阅 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 文件夹中。 更多示例请查阅此页面。
强烈建议根据待分析应用的上下文自定义污点分析配置(接收点、来源、消毒器和验证器的定义)。在以下规范中,超全局变量 _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 的开发信息。