Ich möchte eval()
verwenden, um einfache Gleichungen und logische Ausdrücke aufzulösen, z. 12*(4+3)
.
Wie sicher ist die clientseitige Bewertung, wenn die Eingabe (möglicherweise nicht vertrauenswürdig) bereinigt wird und nur Ziffern erlaubt, + - * / () & lt; & gt; | & amp ;! und die Worte "wahr" und "falsch"?
Verfügbare JS-Parser für Gleichungen sind zu groß und für mich zu komplex. Ich habe selbst einen zusammengeworfen, aber es sind viele Codezeilen im Vergleich zum Evaluieren und es ist noch nicht perfekt.
EDIT: Also ja, ich denke, was ich konkret frage ist, dass jemand bösartigen Code mit nichts außer Ziffern und + - * / () & lt; & gt; | & amp;! ? (Ich denke, 'wahr' und 'falsch' sind harmlos)
Ich denke, es ist völlig sicher, ich glaube nicht, dass eval
böse ist. Benutze es einfach mit Judice,
und überprüfen Sie Ihre Desinfektionsfunktion.
Da Sie keine Unicode-Buchstaben zulassen und weder _
noch $
die Desinfektion bestehen und die Javascript-ID einen Buchstaben enthalten muss, ist es nicht möglich, den globalen Geltungsbereich zu verschmutzen, keine Funktionen aufzurufen.
von MDN-Seite zu Bezeichnern :
Ab JavaScript 1.5 können Sie ISO 8859-1 oder Unicode verwenden Buchstaben wie å und ü in Bezeichnern. Sie können auch den \ uXXXX verwenden Unicode-Escape-Sequenzen als Zeichen in Bezeichnern.
Denken Sie daran, nach einer Ausnahme zu suchen, die von eval
-Aufrufen ausgelöst wird, da es immer möglich ist, einen falschen Ausdruck einzugeben, z. 4><5
.
Achten Sie außerdem darauf, dass Sie nach erlaubten Zeichen suchen, nicht nach solchen, die Sie ablehnen, so dass Zeichen, an die Sie nicht gedacht haben, standardmäßig abgelehnt werden.
Tags und Links javascript eval sanitization