
PHP static application security testing (SAST)-Tool, das taint analysis durchführt, um XSS, SQL injection und andere Schwachstellen mithilfe anpassbarer Regeln und Konfiguration zu erkennen.
Ein Static Application Security Testing (SAST) für PHP
Es gibt verschiedene Möglichkeiten – wählen Sie die, die am besten zu Ihrem Anwendungsfall passt.
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 sollte sich in einem Verzeichnis befinden, das in der Umgebungsvariable $PATH aufgeführt ist:
git clone https://github.com/designsecurity/progpilot
cd progpilot
./build.sh
Das resultierende PHAR-Archiv befindet sich im Ordner builds im Stammverzeichnis dieses Projekts.
Installieren Sie das Paket mit composer, typischerweise wenn Sie progpilot als Bibliothek in Ihrem PHP-Projekt verwenden:
composer require --dev designsecurity/progpilot
Verwenden Sie eine YAML-Konfigurationsdatei (siehe dieses Beispiel), um die progpilot-Analyse zu konfigurieren und anzupassen. Andernfalls wird die Standardkonfiguration verwendet, insbesondere die standardmäßigen Taint-Konfigurationsdaten.
Der progpilot-Befehl nimmt als Argumente die Pfade zu den zu analysierenden Dateien und Ordnern sowie optional eine Konfigurationsdatei:
# ohne Konfigurationsdatei
progpilot example1.php example2.php folder1/ folder2/
# mit einer Konfigurationsdatei
progpilot --configuration configuration.yml example1.php example2.php folder1/ folder2/
Wenn Sie es mit composer installiert haben, befindet sich das Programm unter vendor/bin/progpilot.
Es ist auch möglich, progpilot innerhalb von PHP-Code zu verwenden. Weitere Informationen finden Sie in der API-Dokumentation.
Verwenden Sie diesen Code, um source_code1.php zu analysieren:
<?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);
Wenn source_code1.php diesen Code enthält:
<?php
$var7 = $_GET["p"];
$var4 = $var7;
echo "$var4";
Die vereinfachte Ausgabe lautet:
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"
}
}
Alle in diesem Beispiel verwendeten Dateien (composer.json, example1.php, source_code1.php) befinden sich im Ordner projects/example. Weitere Beispiele finden Sie auf dieser Seite.
Es wird dringend empfohlen, die Taint-Analysekonfiguration (die Definitionen von Sinks, Sources, Sanitizern und Validatoren) an den Kontext der zu analysierenden Anwendung anzupassen. In der folgenden Spezifikation werden die Superglobal-Variablen _GET, _POST oder _COOKIE als nicht vertrauenswürdig definiert, ebenso wie der Rückgabewert der Funktion 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"}
]
}
Die verfügbaren Einstellungen finden Sie im entsprechenden Kapitel zur Spezifikation einer Analyse.
Es können auch eigene Regeln erstellt werden, siehe das entsprechende Kapitel zu benutzerdefinierten Regeln.
Erfahren Sie mehr über die Entwicklung von Progpilot.