2012-04-13 13 views
5

Ich möchte Skripten für Endbenutzer (die serverseitig ausgeführt werden) in einer Anwendung bereitstellen. Ich habe gelesen und festgestellt, dass Sandboxing viel mehr ein Problem ist, als ich dachte.Skripterstellung für Endbenutzer

Ich interessiere mich nicht wirklich was die Sprache ist. LUA, Python, JavaScript, mir geht es gut mit allem, was lesbar ist.

Wie schwer ist es, eine Funktion in einem nicht vertrauenswürdigen Skript auszuführen, einige Informationen weiterzuleiten und weitere zu erhalten? Ich habe gelesen, JVM Security Manager ist ein No-Go und Python ist fast nicht anpassbar, aber ich habe sehr wenig Wissen über das Thema und kann die Quellen nicht wirklich beurteilen.

Wie kann ich zum Beispiel eine Funktion in JS interpretieren, die ein JSON (von, sagen wir, Java oder Python oder sogar node.js) übernimmt und das zurückgegebene JSON zurückbekommt?

Ich würde gerne vermeiden, einen pythonish i-gerade-wissen-es-willst-suck Sprachinterpreter selbst zu implementieren.

+3

JavaScript scheint hier die sicherste Option zu sein. Es ist im Grunde für genau diesen Zweck konzipiert. –

+1

Zum Sandboxing von Python gibt es [einige Hinweise] (http://wiki.python.org/moin/Asking%20for%20Help/How%20can%20I%20run%20an%20untrusted%20Python%20script%20safely%20 % 28i.e.% 20Sandbox% 29) da draußen. –

+0

@Lattyware: Der Ratschlag, CPython zu sichern, ist im Grunde nutzlos, IMHO. Sie empfehlen Chrooting (was unsicher ist) und Virtualisierung (was teuer ist). –

Antwort

4

Lua hat gute Sandboxing-Fähigkeiten und ist sauber und einfach.

Es verfügt über die setfenv()-Funktion, die Code in einer bestimmten Umgebung ausführen kann. Der nicht vertrauenswürdige Code kann nur auf das zugreifen, was sich in der spezifischen Umgebung befindet.
Bei C-Funktionen wie string.rep können Sie eine Speicherüberbelegung verhindern, indem Sie sie durch Lua-Funktionen ersetzen oder einen benutzerdefinierten Speicherzuordner für lua_newstate bereitstellen.

Wenn Sie sich entscheiden, dass Sie Lua für vertrauenswürdigen Code verwenden möchten und über eine Schnittstelle mit nicht vertrauenswürdigem Code verfügen, können Sie die CPU-Auslastung mit coroutines und debug.sethook steuern. Das Lua Wiki hat eine einfache example sandbox.
Die source code der lua live demo könnte auch von Interesse sein.

+0

Danke für die Empfehlung und Referenzen! Ich las herum und entschied, dass ich damit gehen werde und sehen werde, wohin es mich führt. Das sieht großartig aus! – slezica

1

Tcl hat ein sehr starkes Sanbox-Modell und ist wohl eine der besseren Sprachen für Endbenutzer-Scripting. Sie können mehr darüber auf der Manpage safe interpreter lesen.

Verwandte Themen