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