designsecurity / progpilot
安全静态分析器
v1.1.0
2024-05-15 19:04 UTC
Requires
- php: >=7.4
- ircmaxell/php-cfg: ^0.7.0
- myclabs/deep-copy: ^1.11.0
- symfony/console: ^5.4.17
- symfony/yaml: ^5.4.17
Requires (Dev)
- phpro/grumphp: ^1.3
- phpunit/phpunit: ^8.0 || ^9.0
- squizlabs/php_codesniffer: ^3.5
README
PHP的静态应用安全测试(SAST)
安装
选项1:使用独立的phar
- 从发布页面下载最新的phar存档。
- 将文件放置在您的路径中的某个位置,并使其可执行
chmod +x progpilot_vX.Y.Z.phar sudo mv progpilot_vX.Y.Z.phar /usr/local/bin/progpilot
选项2:从源代码构建phar
在开始构建之前,应在$PATH
环境变量列出的目录中找到phar-composer.phar
git clone https://github.com/designsecurity/progpilot
cd progpilot
./build.sh
生成的phar存档将位于此项目根目录的builds
文件夹中。
选项3:使用Composer
使用Composer安装progpilot
composer require --dev designsecurity/progpilot
配置
使用yaml配置文件(查看此示例)来配置和自定义progpilot分析,否则将使用默认配置,特别是标准污染配置数据。
用法
CLI示例
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文件夹中。有关更多示例,请参阅此页面。
指定分析
强烈建议根据要分析的应用程序上下文自定义污染分析配置( sinks、sources、sanitizers和validators的定义)。在以下指定中,全局变量 _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"} ] }
有关指定分析的可用设置,请参阅相应的章节。
还可以创建自定义规则,请参阅相应的章节。