2012-04-13 8 views
5

Vorrei fornire uno script per l'utente finale (che verrebbe eseguito sul lato server) in un'applicazione. Ho letto e ho scoperto che il sandboxing è molto più un problema di quanto pensassi.Scripting per l'utente finale

Non mi interessa davvero cosa è la lingua è. LUA, Python, JavaScript, sto bene con qualsiasi cosa leggibile.

Quanto è difficile eseguire una funzione in uno script non affidabile, passare alcune informazioni e ottenerne altre? Ho letto che JVM Security Manager è un no-go e che Python è quasi invisibile, ma ho pochissime conoscenze sull'argomento e non posso davvero giudicare le fonti.

Come posso, ad esempio, interpretare una funzione in JS che accetta un JSON (da, diciamo, Java, o Python, o anche node.js) e recupera il JSON restituito?

Vorrei evitare di implementare un interprete di linguaggio i-just-know-it-will-suck pitone.

+3

JavaScript sembra l'opzione più sicura qui. È fondamentalmente progettato per questo scopo esatto. –

+1

Per quanto riguarda il sandboxing Python, c'è [qualche consiglio] (http://wiki.python.org/moin/Asking%20for%20Help/How%20can%20I%20run%20an%20untrusted%20Python%20script%20safely%20 % 28i.e.% 20Sandbox% 29) là fuori. –

+0

@Lattyware: il consiglio per proteggere CPython è fondamentalmente inutile, IMHO. Raccomandano il chroot (che non è sicuro) e la virtualizzazione (che è costosa). –

risposta

4

Lua ha buone capacità di sandboxing ed è pulito e semplice.

Ha la funzione setfenv() in grado di eseguire codice in un ambiente specifico. Il codice non affidabile può accedere solo a ciò che si trova nell'ambiente specifico.
Per le funzioni C, come ad esempio string.rep, è possibile evitare il consumo eccessivo della memoria sostituendole con le funzioni Lua o fornendo un allocatore di memoria personalizzato a lua_newstate.

Inoltre, se si decide di utilizzare Lua come codice attendibile e di interfacciarsi con codice non affidabile, è possibile utilizzare coroutines e debug.sethook per controllare l'utilizzo della CPU.

Lua Wiki ha un semplice example sandbox.
Il source code dello lua live demo potrebbe essere di interesse, anche.

+0

Grazie per la raccomandazione e riferimenti! Leggo in giro e decido che andrò con questo e vedrò dove mi porta. Sembra grandioso! – slezica

1

Tcl ha un modello Sanbox molto forte e probabilmente uno dei linguaggi migliori per lo scripting degli utenti finali. Puoi leggere maggiori informazioni sulla pagina man safe interpreter.