Mailinglisten-Archive |
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