escapeshellarg în PHP

Pune un text între ghilimele sigure, ca să poată fi folosit ca argument într-o comandă de shell.

Sintaxă
escapeshellarg(string $arg): string

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ă.