Sicherheit von eval () mit bereinigten Eingaben [duplizieren]

8

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)

    
user3195878 01.02.2014, 18:21
quelle

1 Antwort

1

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.

    
Andrea Parodi 01.02.2014, 18:29
quelle

Tags und Links