
Инструмент статического анализа безопасности приложений на PHP (SAST), который выполняет анализ на основе меток для обнаружения XSS, SQL-инъекций и других уязвимостей с использованием настраиваемых правил и конфигурации.
Статическое тестирование безопасности приложений (SAST) для PHP
Доступно множество вариантов, выберите тот, который лучше всего подходит для вашего случая.
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, иначе будет использована конфигурация по умолчанию, в частности стандартные данные конфигурации 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-анализа (определения 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.