Ce face escapeshellarg
escapeshellarg transformă orice text într-un singur argument de comandă. Pe Linux îl pune între apostrofuri și protejează apostrofurile din interior. Astfel, caracterele speciale precum ;, |, & sau $ nu mai pot porni alte comenzi.
Folosește-l pentru fiecare valoare care ajunge în exec, shell_exec sau system. Funcția înrudită escapeshellcmd protejează o comandă întreagă, dar este mai puțin sigură pentru argumente.
Parametri
| Parametru | Descriere |
|---|---|
$arg |
Textul transformat în argument. |
Ce returnează
Textul protejat, gata de lipit în comandă.
Exemple
Exemplul 1: Cum arată un argument protejat
<?php
echo escapeshellarg("raport final.pdf") . "\n";
echo escapeshellarg("Ana's CV.pdf");
Rezultat
'raport final.pdf'
'Ana'\''s CV.pdf'
Exemplul 2: O încercare de atac neutralizată
Fără protecție, ; echo SPART ar fi rulat ca o a doua comandă. Cu escapeshellarg, tot textul este afișat ca un singur argument.
<?php
$nume = "poza.jpg; echo SPART";
echo shell_exec("echo " . escapeshellarg($nume));
Rezultat
poza.jpg; echo SPART
Greșeli frecvente
- Pui argumentul protejat și între ghilimele proprii:
"ls \"" . escapeshellarg($d) . "\"". Ghilimelele în plus devin parte din argument. Lipește rezultatul direct. - Protejezi doar o parte dintre valori. Fiecare valoare venită din afară trebuie trecută prin
escapeshellarg.
Comenzi înrudite
exec: Rulează o comandă a sistemului de operare și returnează ultima linie afișată de ea.shell_exec: Rulează o comandă prin shell și returnează tot ce a afișat, ca un singur text.htmlspecialchars: Transformă caracterele speciale HTML în entități, ca textul să fie afișat în siguranță în pagină.