Ich weiß, dass einige Leute nur "nie" antworten, solange es Benutzereingaben gibt. Aber nehmen wir an, ich habe etwas wie folgt aus:Wie kann ich Eval in PHP sicher verwenden?
$version = $_REQUEST['version'];
$test = 'return $version > 3;';
$success = eval($test);
Dies ist offensichtlich eine vereinfachte Fall aber ist es etwas, was ein Benutzer eingeben kann als version
dies zu bekommen, etwas zu tun böswillige? Wenn ich den Typ der Strings, die $test
für den Vergleich des Werts bestimmter Variablen mit anderen Variablen übernehmen können, einschränken kann, gibt es irgendeinen Weg, den irgendjemand sehen kann, um das auszunutzen?
bearbeiten
Ich habe versucht, auf dem Server und nichts das folgende Skript ausgeführt passiert:
<?php
$version = "exec('mkdir test') + 4";
$teststr = '$version > 3;';
$result = eval('return ' . $teststr);
var_dump($result);
?>
alles, was ich bekommen bool(false)
ist. Kein neues Verzeichnis wird erstellt. Wenn ich eine Zeile habe, die vorher exec('mkdir test')
aufruft, erstellt sie tatsächlich das Verzeichnis. Es scheint korrekt zu funktionieren, indem man nur eine Zeichenfolge, die in eine Zahl konvertiert wurde, mit einer anderen Zahl vergleicht und das Ergebnis als falsch erkennt.
Wie gesagt, '$ success = eval ($ test)' funktioniert nicht wie erwartet in PHP (anders als JavaScript). Sie müssen die Zuweisung in der bewerteten Zeichenfolge vornehmen. –
Zwei Dinge: Sie vertrauen vollständig auf Benutzereingaben.Nicht nur das, Sie erlauben dem Benutzer somit, beliebigen Code auszuführen. Voila, sofortiger Exploit! (ja, ich würde sagen "nimm nie eval") – Piskvor
Ich habe versucht, Code in dort zu injizieren, und es funktioniert einfach nicht für mich. –