
PHP 정적 애플리케이션 보안 테스트(SAST) 도구로, 사용자 정의 가능한 규칙과 구성을 사용하여 XSS, SQL 인젝션 및 기타 취약점을 탐지하기 위해 오염 분석(taint analysis)을 수행합니다.
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 폴더에 위치합니다.
PHP 프로젝트의 라이브러리로 progpilot을 사용하는 경우 composer로 패키지를 설치하세요:
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에 위치합니다.
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 폴더에 있습니다. 더 많은 예제는 이 페이지를 참조하세요.
분석 대상 애플리케이션의 컨텍스트에 맞게 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 개발에 대해 자세히 알아보기.