2009-10-30 6 views
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?Sicherheitsrisiken bei der Verwendung von eval() zum Ausführen von Benutzereingaben in JavaScript

+4

Führen Sie die Seite nur lokal aus. Es gibt keinen Grund, es ins Internet zu stellen. –

Antwort

5

Es wird auf einer eigenen Maschine ausgeführt werden. Lassen Sie sie nicht einfach Strings speichern und an andere Leute senden - tragen Sie die Werte auch nicht via GET in die URL ein (damit sie per E-Mail versendet werden können).

0

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

Wenn also jemand Code auf einem Rechner ausführen möchte, der gesperrt ist, aber seiner Site vertraut (zB würde man aktive x-Steuerelemente usw. laufen lassen), hätte diese Person die Möglichkeit dazu Geben Sie den richtigen Code ein und verwenden Sie Ihre Site, 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 vertrauenswürdige Sites in IE usw.)

2

Wenn es auf einem lokalen "Wegwerf" -Maschine ist, dann gibt es sehr wenig 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 dem Tamper Data Add-on zu geben.

Kurz gesagt, es gibt sehr wenig Risiko (abgesehen von der Leistung), ihnen die Freiheit zu geben, JavaScript mit Ausnahme der Maschine, die sie verwenden, aber es ist immer noch nichts, was sie selbst nicht tun könnten, wenn sie schlau genug ist. Ich würde empfehlen, sie entweder auf ihren eigenen Rechnern laufen zu lassen, oder auf einer Demo-Box, die du jederzeit neu erstellen kannst, wenn es zu voll ist, um weiterzumachen.

Jetzt geben sie Eval Zugriff auf PHP/etc auf der anderen Seite wäre eine schreckliche, schreckliche Idee.

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 auf die auf einer Website laufende Version JavaScript hatte. Sie können alles tun, was JavaScript in Ihrer Domain ausführen könnte (einschließlich Cookie-Diebstahl, XSS, Drive-by-Malware usw.).

Das einzige, was Sie realistisch 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 potenzielle Angreifer eine interpretierte Sprache hat, mit der er seine Absichten verbergen kann).

Wohlgemerkt, wenn dies für Bildungszwecke ist, dann ist ein Ansatz, nur um 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 darauf, dass Domain-Besucher vertrauliche Informationen irgendwie preisgeben (phishing Angriffe oder ähnliches). Für Ihre Zwecke, denke ich, werden Sie in Ordnung sein - tun Sie es einfach nicht auf einer "echten" Website.

+0

Super Erklärung. –

+4

Ist die Möglichkeit, beliebigen Code auszuführen, der von einem Benutzer bereitgestellt wird, nicht ein Problempunkt, wenn man bedenkt, dass Benutzer beliebigen Code ausführen können, den sie mit Entwicklertools verwenden möchten? –

2

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

Geben Sie einen Blick auf die folgenden Ressourcen:

+2

Das sind keine Sandboxen, nur neue Umgebungen. Das Elternfenster kann leicht über "Eltern" oder "Oben" erreicht werden und Sie können die Eval-Methode des Objekts verwenden. Eine echte JavaScript-Sandbox-Bibliothek in JavaScript ist JSandbox. –

1

Es gibt wirklich keine ernsthafte Gefahr hier. Öffnen Sie zum Beispiel den Firebug auf dieser Seite und geben Sie die Konsole ein: eval("alert('hello');");, Problem? Nicht wirklich.

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

2

Sie könnten versuchen, eine JavaScript Sandboxing-Bibliothek zu verwenden. Dean Edwards Lösung Caja beschränkt den Zugriff von Code auf das aktuelle Fenster oder Dokument nicht. Die JSandbox-Bibliothek vollendet die Sandbox-Codeausführung unter Verwendung von Web Worker Threads (Sie können das DOM aus diesem Grund nicht verwenden), aber es funktioniert nur in Browsern, die sie unterstützen.

JSandbox ist asynchron, daher müssen Sie Ihren Code ändern, um Rückrufe zu verwenden, wenn Sie ihn verwenden.

Verwandte Themen