Alexander (HH): Ist eval gefährlich?

Beitrag lesen

Moin Moin!

Allerdings weiß ich immer noch nicht, wie der Schadcode über die Usereingabe an das Eval übergeben werden kann, ohne dass der User es selbst macht.

Warum diese Einschränkung? "Hast Du schonmal die eval-unescape-Formel aus http://forum.de.selfhtml.org/?t=201149&m=1356611 eingegeben? Macht eine echt coole Grafik ..." und ich hab gewonnen. ;-)

Vom Austricksen der User abgesehen gäbe es noch Cross Site Scripting, diverse Injection-Methoden, oder schlicht Browser, die es gut mit dem User meinen und Formularfelder vorbelegen.

Manche Server erledigen die Vorbelegung auch von sich aus, wenn sie passend benannte GET-Parameter in der URL finden (Affenformular). Damit braucht man dem User nur noch eine passende URL geben und ihn überreden, sich die voreingestellte Funktion plotten zu lassen.

Bei meiner Seite lese ich das Inputfeld aus und übergebe den String dann an eval:

with(Math) { for(var x=xmin,i=0;x<=xmax;x+=dx,i++) arr[p][i] = { x: x, y: eval(gl[j]) }; }

with(Math) bringt keinerlei Sicherheit, nur die Bequemlichkeit, nicht jeder Math-Methode "Math." voranstellen zu müssen.

Der Rest ist ein ungeschütztes eval, das auch noch für eine vermutlich recht große Zahl von Punkten ausgeführt wird. Das macht's nicht schneller. So lange die Eingaben vertrauenswürdig sind (sprich: isolierte Systeme ohne böse User), wäre eine einmalig daraus generierte JS-Funktion vermutlich flotter.

in gl befinden sich die Gleichungen aus den Inputfeldern, j ist ein Schleifenzähler. Wo ist hier jetzt das Einfallstor?

Die ungeprüfte Übernahme von Strings aus gl[j] in eval().

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".