phpbar.de logo

Mailinglisten-Archive

[php] eval ohne Sicherheitlücken

[php] eval ohne Sicherheitlücken

Bastian Haustein bh at plan-i.de
Mon Feb 2 19:55:25 CET 2004


Hallo zusammen!

ich habe folgendes "Problem": Ich möchte es Benutzern erlauben Formeln und
logische Ausdrücke mit bestimmten Variablen einzugeben, ohne dadurch eine
Sicherheitslücke entstehen zu lassen. Am schönsten wäre es dann, den
Ausdruck mit eval auszuführen, etwa so:

<snip>
$ausdruck = "$i>=50"; //Also der Benutzer hat "$i>=50" eingegeben
$ausdruck = "return ".$ausdruck.';';
if(@eval($ausdruck)) echo "Stimmt!";
</snip>

Mein Problem ist, das der ausdruck ja auch so manipuliert werden kann, dass
er ein Sicherheitsrisiko darstellt, z.B.:

<snip>
$ausdruck="echo $geheinmesdatenbankpasswort"; //oder
$ausdruck="include 'hackerscript.php';"       //oder
$ausdruck="mysql_query('DROP something FROM tabelle');"
</snip>

oder so. Daher lösche ich aus dem Ausdruck im Moment alle Anführungszeichen
und Klammern, bevor ich ihn mit eval ausführe:

<snip>
if(@eval(strtr("'\"()[]{}","        ",$ausdruck))) echo "Stimmt!";
</snip>

IMHO sollte es damit nicht mehr möglich sein, irgendwelchen "Mist"
auszuführen. Nun die Frage:

1) Fällt euch eine Angriffsmöglichkeit ein, die dadurch noch nicht
ausgeschlossen ist?
2) gibt es eine Möglichkeit runde Klammern zu erlauben, ohne dadurch eine
Sicherheitslücke zu schaffen? Für Mathematische Formeln sind die durchaus
auch interessant!

Liebe Grüße aus Aachen!

Bastin

php::bar PHP Wiki   -   Listenarchive