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