Sicherheitsrisiken bei der Verwendung von eval () zum Ausführen von Benutzereingaben in JavaScript

7

Ich plane, eine kurze Webseite für meine Schüler zusammenzustellen, um sie über JavaScript-Programmierung zu unterrichten. Auf dieser Seite möchte ich ihnen ein Textfeld geben und es ihnen ermöglichen, JavaScript auszuführen, damit sie die dynamische Natur der Sprache bei der Arbeit sehen können. Mir ist jedoch klar, dass die Verwendung von eval () für Benutzereingaben normalerweise eine sehr schlechte Idee ist. Welche Art von Sicherheitsrisiken nehme ich an, indem ich eine solche Seite veröffentliche? Welche Schritte sollte ich unternehmen, um diese Risiken zu minimieren?

    
Spitfire 30.10.2009, 17:07
quelle

7 Antworten

8

Das Sicherheitsrisiko, das Sie eingehen, besteht darin, dass Sie Eingaben vom Benutzer vornehmen und diese im Kontext eines Skripts auf Ihrer Website ausführen. Stellen Sie sich vor, Sie wären ein bösartiger Cracker, der aus irgendeinem Grund uneingeschränkten Zugriff hatte, um das JavaScript auf einer Website zu bearbeiten. Sie können alles tun, was JavaScript auf Ihrer Domain ausführen könnte (einschließlich Cookie-Diebstahl, XSS , Laufwerk) -durch Malware usw.).

Das einzige, was Sie realistischerweise tun können, um die Risiken zu mindern, besteht darin, den von Benutzern bereitgestellten Inhalt nicht zu überprüfen. Versuche, die Eingabe zu bereinigen, um nur "sichere" Eingaben zuzulassen, sind zum Scheitern verurteilt; Es ist fast unmöglich zu definieren, was als sicher gilt, und sogar noch schwieriger, das Skript darauf zu beschränken (da der potentielle Angreifer eine interpretierte Sprache hat, mit der er seine Absichten verschleiern kann).

Bitte beachten Sie, wenn dies für Bildungszwecke gedacht ist, besteht ein Ansatz darin, sicherzustellen, dass alle Sicherheitslücken keine Rolle spielen. Schlechtes JavaScript kann Ihren Server nicht zerstören oder Geld von Ihrem Bankkonto stehlen (es sei denn, es befindet sich auf der Webseite Ihrer Bank). Wenn die Seite, auf der die Seite gehostet wird, keine Cookies oder Sitzungen enthält, die es wert sind gestohlen zu werden, und die Schüler wissen, dass es nur eine Bildungsressource ist, denke ich nicht, dass es etwas geben würde, worüber man sich Sorgen machen müsste. Die meisten Angriffe basieren auf dem Zugriff auf vertrauliche Informationen, die in Ihrer Domain gespeichert sind, oder auf dem Versuch, Domänenbesucher irgendwie dazu zu bringen, vertrauliche Informationen aufzugeben ( Phishing ) Angriffe oder ähnliches). Für Ihre Zwecke, denke ich, werden Sie in Ordnung sein - tun Sie es nicht auf einer "echten" Website.

    
Andrzej Doyle 30.10.2009 17:14
quelle
5

Es wird auf ihrer eigenen Maschine laufen. Lassen Sie sie einfach keine Zeichenketten speichern und an andere Leute senden - geben Sie die Werte auch nicht über einen GET in die URL ein (damit Sie sie per E-Mail versenden können).

    
Lou Franco 30.10.2009 17:10
quelle
2

Ich würde Ihnen empfehlen, alle Benutzereingaben auszuwerten, um zu verhindern, dass der ausgewertete Code auf alle globalen (Fenster-) Objekteigenschaften und -methoden zugreift.

Sehen Sie sich die folgenden Ressourcen an:

CMS 30.10.2009 17:27
quelle
2

Wenn es sich um eine lokale "Wegwerf" -Maschine handelt, besteht ein sehr geringes Risiko. Da alles clientseitig läuft, können sie sich nur mit JavaScript schaden. Im schlimmsten Fall könnten sie Ajax Verbindungen öffnen, aber das ist nicht viel schädlicher, als ihnen einen Firefox mit der Manipulationsdaten Add-on.

Kurz gesagt, es besteht nur ein sehr geringes Risiko (abgesehen von der Performance), dass man ihnen mit Ausnahme von der Maschine, die sie benutzen, freie Hand gibt, aber es ist immer noch nichts, was sie nicht selbst tun könnten, wenn sie schlau genug wäre. Ich würde empfehlen, sie entweder auf ihren eigenen Maschinen laufen zu lassen, oder auf einer Demo-Box, die du jederzeit neu erstellen kannst, wenn es zu voll ist, um weiterzumachen.

Nun wäre es eine schreckliche, schreckliche Idee, ihnen den eval-Zugang zu PHP / etc zu geben.

    
Dereleased 30.10.2009 17:11
quelle
2

Sie könnten versuchen, eine JavaScript-Sandbox-Bibliothek zu verwenden. Dean Edwards Lösung Caja beschränkt den Zugriff von Code auf das aktuelle Fenster oder Dokument nicht. In der JSandbox -Bibliothek wird die Codeausführung vollständig mithilfe von durchgeführt Web Worker Threads (Sie können das DOM aus diesem Grund nicht verwenden), aber es funktioniert nur in Browsern, die diese unterstützen.

JSandbox ist asynchron, daher müssen Sie Ihren Code ändern, um Callbacks zu verwenden, wenn Sie sie verwenden.

    
Eli Grey 31.10.2009 01:24
quelle
1

Hier besteht wirklich kein ernsthaftes Risiko. Öffnen Sie beispielsweise auf dieser Seite einen Firebug und geben Sie die Konsole ein: eval("alert('hello');"); , problem? Nicht wirklich.

Für Demozwecke ist das keine große Sache.

    
rfunduk 30.10.2009 18:05
quelle
0

Nun, das bedeutet, dass jeder Code, den ein Benutzer ausführen möchte, auf Ihrem Formular und unter der Autorität der Domain, unter der Ihre Site läuft, ausgeführt werden kann.

Wenn also jemand Code auf einer Maschine ausführen möchte, die gesperrt ist, aber Ihrer Site vertraut (zB würde es Ihnen erlauben, aktive x-Steuerelemente usw. auszuführen), hätte diese Person die Möglichkeit dazu, indem sie eingibt Im richtigen Code verwenden Sie Ihre Website, um das Skript in den vertrauenswürdigen Bereich zu übertragen. Im Wesentlichen bestätigen Sie damit, dass alles, was auf dieser Seite ausgeführt wird, für Personen, die Ihrer Domain vertrauen, als sicher verifiziert wird. (Denken Sie an vertrauenswürdige Sites in IE etc.)

    
kemiller2002 30.10.2009 17:11
quelle

Tags und Links