Ich möchte die Möglichkeit haben, dass Benutzer beliebigen JavaScript-Code senden können, der dann an einen Node.JS-Server gesendet und sicher ausgeführt wird, bevor die Ausgabe an mehrere Clients zurückgesendet wird (als JSON). Die Funktion eval
kommt mir in den Sinn, aber ich weiß, dass dies mehrere Sicherheitsbedenken hat (der vom Benutzer eingegebene Code könnte auf Nodes Datei-API usw. zugreifen). Ich habe einige Projekte wie Microsoft Web Sandbox und Google Caja gesehen, die die Ausführung von saniertem Markup und Skript (zum Einbetten von Drittanbieter-Anzeigen auf Websites) erlauben, aber es scheint, dass dies clientseitige Tools sind und ich bin mir nicht sicher, ob sie dies können sicher in Node verwendet werden.sicher Sandbox und Ausführen von Benutzer eingereichten JavaScript?
Gibt es eine Standardmethode zum Sandboxing und Ausführen von nicht vertrauenswürdigem JavaScript in Node, um die Ausgabe zu erhalten. Ist es ein Fehler, diese Server-Seite zu versuchen?
EDIT: Es ist nicht wichtig, dass der Benutzer die vollen Fähigkeiten von JavaScript nutzen kann, in der Tat wäre es besser, in der Lage zu sein, auszuwählen, welche APIs für den Benutzercode bereitgestellt werden.
EDIT: Ich werde fortfahren und aktualisieren mit dem, was ich gefunden habe. Dieses Sandcastle-Modul (bcoe/sandcastle
) scheint darauf abzielen, das zu tun, was ich vorhabe. Ich bin mir nicht sicher, wie sicher es ist, aber da ich nichts für zu wichtig halte, denke ich, werde ich es versuchen. Ich werde meine eigene Antwort hinzufügen, wenn ich das erfolgreich machen kann.
Warum muss es auf Ihrem Server und nicht auf dem Client ausgeführt werden? – delnan
Ich denke, das ist ein Fehler, aber Sie könnten versuchen, den Knoten 'vm' Zeug - http: //nodejs.org/api/vm.html – JoshRagem
Dies ist für ein Programmier-Spiel-Konzept zum Spaß, ich kann nicht vertrauen Clients, um den Code auszuführen. Ich möchte es aus diesem Grund Server-Seite tun, und da die Ausgabe serialisiert und an 1 oder mehrere andere Clients gesendet wird. Es sieht aus wie das VM-Modul oder etwas, was es ist, was ich will. –