Command injection: dall'input alla shell
Quando l'app costruisce un comando shell con input non validato, i metacaratteri della shell diventano codice:
system("ping -c 1 " . $_GET['host']);
// host = 8.8.8.8; cat /etc/passwd;, |, &&, $(...), backtick: tutti separano o iniettano comandi. Anche in blind, ; sleep 5 o l'esfiltrazione via DNS/HTTP confermano l'esecuzione.
Difesa
Evita la shell: usa API che accettano argomenti come array (execve-style, subprocess.run([...], shell=False)), così l'input è un argomento, non codice. Se proprio serve la shell, valida con whitelist rigide. L'escaping (escapeshellarg) è l'ultima risorsa, facile da sbagliare.