designsecurity/progpilot

安全静态分析器

v1.1.0 2024-05-15 19:04 UTC

This package is auto-updated.

Last update: 2024-08-30 16:23:17 UTC


README

PHP的静态应用安全测试(SAST)

Build Status Packagist Packagist

安装

选项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"}
    ]
}

有关指定分析的可用设置,请参阅相应的章节
还可以创建自定义规则,请参阅相应的章节

开发

了解更多关于Progpilot的开发信息

常见问题解答

在此