
Outil de test de sécurité statique d'applications PHP (SAST) qui effectue une analyse de flux (taint analysis) pour détecter les XSS, les injections SQL et autres vulnérabilités en utilisant des règles et une configuration personnalisables.
Un outil de test de sécurité statique d'application (SAST) pour PHP
Plusieurs options sont disponibles, choisissez celle qui correspond le mieux à votre cas d'utilisation.
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 doit se trouver dans un répertoire listé dans la variable d'environnement $PATH :
git clone https://github.com/designsecurity/progpilot
cd progpilot
./build.sh
L'archive PHAR résultante se trouvera dans le dossier builds à la racine de ce projet.
Installez le paquet avec composer, généralement lorsque vous utilisez progpilot comme bibliothèque de votre projet PHP :
composer require --dev designsecurity/progpilot
Utilisez un fichier de configuration YAML (regardez cet exemple) pour configurer et personnaliser l'analyse progpilot, sinon la configuration par défaut sera utilisée avec, notamment, les données de configuration de taint standard.
La commande progpilot prend en argument le chemin des fichiers et dossiers à analyser et éventuellement un fichier de configuration :
# sans fichier de configuration
progpilot example1.php example2.php folder1/ folder2/
# avec un fichier de configuration
progpilot --configuration configuration.yml example1.php example2.php folder1/ folder2/
Si vous l'avez installé avec composer, le programme se trouvera dans vendor/bin/progpilot.
Il est également possible d'utiliser progpilot dans du code PHP. Pour plus d'informations, consultez la documentation de l'API.
Utilisez ce code pour analyser 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);
Lorsque source_code1.php contient ce code :
<?php
$var7 = $_GET["p"];
$var4 = $var7;
echo "$var4";
La sortie simplifiée sera :
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"
}
}
Tous les fichiers (composer.json, example1.php, source_code1.php) utilisés dans cet exemple se trouvent dans le dossier projects/example. Pour plus d'exemples, consultez également cette page.
Il est fortement recommandé de personnaliser la configuration de l'analyse de taint (les définitions des sinks, sources, sanitizers et validateurs) en fonction du contexte de l'application à analyser. Dans la spécification suivante, les variables superglobales _GET, _POST ou _COOKIE sont définies comme non fiables, ainsi que le retour de la fonction 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"}
]
}
Consultez les paramètres disponibles dans le chapitre correspondant sur la spécification d'une analyse.
Des règles personnalisées peuvent également être créées, voir le chapitre correspondant sur les règles personnalisées.
En savoir plus sur le développement de Progpilot.