phpbar.de logo

Mailinglisten-Archive

[php] eval ohne Sicherheitlücken

[php] eval ohne Sicherheitlücken

Martin Rozmus martinrozmus at freenet.de
Mit Feb 4 17:12:18 CET 2004


Hallo Bastian,
On Monday 02 February 2004 19:55, Bastian Haustein wrote:
> 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:
Entwickle doch eine Metasprache mit Befehlen, Kontrollstrukturen etc. und lass 
die Eingabe des Benutzers mit PHP parsen. Dann ist alles verboten, was nicht 
explizit erlaubt ist.

-- 
MfG
Martin Rozmus

martinrozmus at freenet.de



php::bar PHP Wiki   -   Listenarchive