(PHP 4, PHP 5, PHP 7, PHP 8)
escapeshellcmd — Protège les caractères spéciaux du Shell
escapeshellcmd() échappe tous les
caractères de la chaîne command
qui pourraient avoir une signification spéciale dans une
commande Shell. Cette fonction devrait être utilisée pour s'assurer que toute
donnée provenant des entrées utilisateur est échappée avant d'être passée aux fonctions
exec() et system(), ou encore
à guillemets obliques.
Les caractères suivants sont précédés d'un antislash :
&#;`|*?~<>^()[]{}$\, \x0A
et \xFF. ' et "
ne sont échappés que s'ils ne sont pas par paire. Sous Windows, tous ces caractères
ainsi que % et ! sont précédés d'un
accent circonflexe (^).
commandLa commande à échapper.
La chaîne échappée.
Exemple #1 Exemple avec escapeshellcmd()
<?php
// Nous autorisons un nombre arbitraire d'arguments de façon intentionnelle ici.
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
system($escaped_command);
?>La fonction escapeshellcmd() devrait être utilisée sur toute la chaîne de commande, mais elle autorise tout de même un attaquant à passer un nombre arbitraire d'arguments. Pour échapper un seul argument, la fonction escapeshellarg() devrait être utilisée à la place.
Les espaces ne sont pas échappés par escapeshellcmd()
ce qui peut être problématique sur Windows avec des chemins tels que :
C:\Program Files\ProgramName\program.exe.
Ceci peut être atténué en utilisant l'extrait de code suivant :
<?php
$cmd = preg_replace('`(?<!^) `', '^ ', escapeshellcmd($cmd));