
Strumento di test di sicurezza statico delle applicazioni PHP (SAST) che esegue analisi del taint per rilevare XSS, SQL injection e altre vulnerabilità utilizzando regole e configurazione personalizzabili.
Un test di sicurezza statico delle applicazioni (SAST) per PHP
Sono disponibili diverse opzioni, scegli quella più adatta al tuo caso d'uso.
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 deve essere situato in una directory elencata nella variabile d'ambiente $PATH:
git clone https://github.com/designsecurity/progpilot
cd progpilot
./build.sh
L'archivio phar risultante sarà nella cartella builds alla radice di questo progetto.
Installa il pacchetto con composer, tipicamente quando si utilizza progpilot come libreria di un progetto PHP:
composer require --dev designsecurity/progpilot
Usa un file di configurazione yaml (guarda questo esempio) per configurare e personalizzare l'analisi di progpilot, altrimenti verrà utilizzata la configurazione predefinita con, in particolare, i dati di configurazione standard per il taint .
Il comando progpilot accetta come argomenti il percorso dei file e delle cartelle da analizzare e opzionalmente un file di configurazione:
# senza file di configurazione
progpilot example1.php example2.php folder1/ folder2/
# con un file di configurazione
progpilot --configuration configuration.yml example1.php example2.php folder1/ folder2/
Se lo hai installato con composer, il programma si troverà in vendor/bin/progpilot.
È anche possibile utilizzare progpilot all'interno del codice PHP. Per maggiori informazioni consulta la documentazione API.
Usa questo codice per analizzare 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);
Quando source_code1.php contiene questo codice:
<?php
$var7 = $_GET["p"];
$var4 = $var7;
echo "$var4";
Il output semplificato sarà:
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"
}
}
Tutti i file (composer.json, example1.php, source_code1.php) utilizzati in questo esempio si trovano nella cartella projects/example. Per ulteriori esempi, consulta anche questa pagina.
Si consiglia vivamente di personalizzare la configurazione dell'analisi del taint (le definizioni di sink, source, sanitizer e validator) in base al contesto dell'applicazione da analizzare. Nella seguente specifica, le variabili superglobali _GET, _POST o _COOKIE sono definite come non affidabili, così come il valore di ritorno della funzione 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"}
]
}
Vedi le impostazioni disponibili nel capitolo corrispondente sulla specifica di un'analisi.
È possibile creare anche regole personalizzate, vedi il capitolo corrispondente sulle regole personalizzate.
Maggiori informazioni sullo sviluppo di Progpilot.