escapeshellcmdMaskiert Metazeichen der Shell
&reftitle.description;
stringescapeshellcmdstringcommandescapeshellcmd maskiert alle möglichen Zeichen in
einer Zeichenkette, die dazu benutzt werden könnten, um einen Shellbefehl
zur Durchführung beliebiger Befehle zu veranlassen. Diese Funktion sollte
verwendet werden, um sicherzustellen, dass alle Daten aus einer
Benutzereingabe maskiert werden, bevor diese Daten zu einer der Funktionen
exec, system oder dem
Backtick-Operator
übergeben werden
Folgenden Zeichen wird ein Backslash vorangestellt:
&#;`|*?~<>^()[]{}$\, \x0A
und \xFF. ' und "
werden nur maskiert, wenn sie nicht paarweise auftreten. Unter Windows wird
all diesen Zeichen sowie % und ! ein
Caret-Zeichen (^) vorangestellt.
&reftitle.parameters;
command
Der zu maskierende Befehl.
&reftitle.returnvalues;
Die maskierte Zeichenkette.
&reftitle.examples;
escapeshellcmd-Beispiel
]]>
&reftitle.notes;
escapeshellcmd sollte auf die gesamte
Befehls-Zeichenkette angewendet werden. Trotzdem kann der Angreifer damit
eine beliebige Anzahl von Argumenten übergeben. Um einzelne Argumente zu
maskieren, sollte stattdessen escapeshellarg
verwendet werden.
Leerzeichen werden von escapeshellcmd nicht maskiert,
was unter Windows bei Pfaden wie
C:\Program Files\ProgramName\program.exe problematisch
sein kann. Dies kann mit dem folgenden Codeschnipsel entschärft werden:
&reftitle.seealso;
escapeshellargexecpopensystemBacktick-Operator