escapeshellcmd Maskiert Metazeichen der Shell &reftitle.description; stringescapeshellcmd stringcommand escapeshellcmd 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; <function>escapeshellcmd</function>-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; escapeshellarg exec popen system Backtick-Operator