Frage

Ich bin Codierung eine Web-Schnittstelle zu einem schrecklichen Stück versöhnender Software nutzt unser Unternehmen. Die Software hat keine wirkliche UI und verlangt von uns, Kitt Zugang zu unserem System für unsere Kunden zu geben, selbst Daten zu ziehen. Mein Web-Interface verfügt über eine exec(); Funktion laufen und es hat ein paar Variablen, die die Benutzereingaben zu übergeben.

$command = "report-call '$type' '$study' '$server' '$tag' '$specopt1' '$specopt2' '$specopt3' '$specopt4'";
$last_line = exec($command, $output, $returnvalue); 

Jetzt gehe ich davon aus, ich könnte nur alle Semikolons aus dem $command varible entfernen und sicher sein, aber ich bin nicht sicher, und das ist, warum ich das hier bin posieren vor der wir leben im nächsten Monat gehen.

Was wäre der beste Weg, $command zu sanieren? Es gibt ein paar Sonderzeichen, die brauche ich in der Variablen [ ] < > ! # $ sein.

War es hilfreich?

Lösung

die Funktion verwenden, die PHP für diesen Zweck hat:

$cmd = 
     "/usr/bin/do-something " . 
     escapeshellarg($arg1) . 
     ' ' . 
     escapeshellarg($arg2);

Sie können auch verwenden escapeshellcmd()

Was ist der Unterschied?

escapeshellarg() fügt nur 'um die Zeichenfolge und dann \ bevor andere Charaktere. http://www.php.net/escapeshellarg

escapeshellcmd() entkommt alle Shell empfindlichen Zeichen ($, \, etc ..), aber nicht hinzufügen, zitiert. http://www.php.net/manual/en/function.escapeshellcmd.php

Die Gotcha ist in dem Fall, dass Sie escapeshellarg() als Teil eines QUOTED Parameter verwenden. Dann wird es unbrauchbar gemacht (eigentlich Anführungszeichen in den Mix).

Im Allgemeinen bevorzugen wir escapeshellcmd() mit unseren eigenen Anführungszeichen verwenden hinzugefügt.

$cmd = 
    "/usr/bin/do-something '" . 
    escapeshellcmd($arg1) . 
    "' '" . 
    escapeshellcmd($arg2) . 
    "'";

Seien Sie sicher!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top