2012-04-13 16 views
5

Me gustaría proporcionar scripts de usuario final (que se ejecutarían en el lado del servidor) en una aplicación. He estado leyendo y descubrí que el sandboxing es mucho más problemático de lo que pensaba.Creación de scripts para el usuario final

Realmente no me importa qué es el idioma. LUA, Python, JavaScript, estoy bien con cualquier cosa legible.

¿Qué tan difícil es ejecutar una función en un script que no es de confianza, pasar algo de información y obtener algo más? He leído JVM Security Manager es un no-go y Python es casi inservible, pero tengo muy poco conocimiento sobre el tema y realmente no puedo juzgar las fuentes.

¿Cómo puedo, por ejemplo, interpretar una función en JS que toma un JSON (de, digamos, Java o Python o incluso node.js) y recuperar el JSON devuelto?

Me gustaría evitar la implementación de un intérprete idiomático pythonish i-simplemente-sé-que-me-chupará.

+3

JavaScript parece ser la opción más segura aquí. Básicamente está diseñado para este propósito exacto. –

+1

En cuanto a sandboxing Python, hay [algunos consejos] (http://wiki.python.org/moin/Asking%20for%20Help/How%20can%20I%20run%20an%20untrusted%20Python%20script%20safely%20 % 28i.e.% 20Sandbox% 29) por ahí. –

+0

@Lattyware: El consejo para asegurar CPython no es básicamente inútil, en mi humilde opinión. Recomiendan el robo (que no es seguro) y la virtualización (que es caro). –

Respuesta

4

Lua tiene una buena capacidad de espacio aislado y es simple y limpia.

Tiene la función setfenv() que puede ejecutar código en un entorno específico. El código que no es de confianza solo puede acceder a lo que está en el entorno específico.
Para funciones C, como string.rep, puede evitar el consumo excesivo de memoria reemplazándolas por funciones Lua o proporcionando un asignador de memoria personalizado al lua_newstate.

Además, si decide que desea utilizar Lua para el código confiable y hacer que interactúe con el código que no es de confianza, puede usar coroutines y debug.sethook para controlar el uso de la CPU.

The Lua Wiki tiene un simple example sandbox.
El source code del lua live demo también puede ser de su interés.

+0

¡Gracias por la recomendación y las referencias! Leí todo y decidí ir con esto y ver a dónde me lleva. ¡Se ve genial! – slezica

1

Tcl tiene un modelo de sanbox muy fuerte, y podría decirse que es uno de los mejores lenguajes para el usuario final de scripts. Puede obtener más información al respecto en la página del manual safe interpreter.

Cuestiones relacionadas