(PHP 4, PHP 5, PHP 7)
escapeshellcmd — Maskiert Shell-Metazeichen
$command
) : stringescapeshellcmd() maskiert alle möglichen Zeichen in einer Zeichenkette, die dazu benutzt werden könnten, um einen Shellbefehl zur Durchführung von willkürlichen Befehlen 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
Folgende Zeichen wird ein Backslash vorangestellt:
&#;`|*?~<>^()[]{}$\
, \x0A
und \xFF
. '
und "
werden nur maskiert, wenn sie nicht gepaart auftreten. Unter Windows wird all
diesen Zeichen sowie %
und !
ein Caret-Zeichen
(^
) vorangestellt.
command
Das zu maskierende Kommando.
Die maskierte Zeichenkette.
Beispiel #1 escapeshellcmd() Beispiel
<?php
// Wir erlauben hier absichtlich eine beliebige Anzahl von Argumenten
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
system($escaped_command);
?>
escapeshellcmd() sollte auf die gesamte Kommando-Zeichenkette angewendet werden, und erlaubt dem Angreifer dennoch eine beliebige Anzahl von Argumenten zu übergeben. Um einzelne Argumente zu maskieren, sollte statt dessen escapeshellarg() verwendet werden.
Version | Beschreibung |
---|---|
5.4.43, 5.5.27, 5.6.11 | Ausrufezeichen werden durch Leerzeichen ersetzt. |
5.3.0 | Unter Windows werden die Sonderzeichen nun ordnungsgemäß maskiert. Zuvor wurden sie durch ein Leerzeichen ersetzt. |