escapeshellcmd

(PHP 4, PHP 5, PHP 7)

escapeshellcmdMaskiert Shell-Metazeichen

Beschreibung

escapeshellcmd ( string $command ) : string

escapeshellcmd() 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. In Windows werden alle diese Zeichen sowie % und ! durch ein Leerzeichen ersetzt.

Parameter-Liste

command

Das zu maskierende Kommando.

Rückgabewerte

Die maskierte Zeichenkette.

Beispiele

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);
?>

Warnung

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.

Changelog

Version Beschreibung
5.4.43, 5.5.27, 5.6.11 Ausrufezeichen werden durch Leerzeichen ersetzt.

Siehe auch

  • escapeshellarg() - Maskiert eine Zeichenkette (String), um sie als Shell-Argument benutzen zu können
  • exec() - Führt ein externes Programm aus
  • popen() - Öffnet einen Prozesszeiger
  • system() - Führt ein externes Programm aus und zeigt dessen Ausgabe an
  • Backtick Operator