2012-06-12 16 views
6

Nota: Te agradecería algunas sugerencias de etiquetas para este ..que permite al usuario una versión de espacio aislado de un lenguaje de programación

Me gustaría ofrecer mis usuarios un método de manipulación de datos mediante programación en el servidor. Esto se haría usando un editor de código en el navegador para ser ejecutado en una fecha posterior, no muy diferente a la manera en que https://www.onx.ms emplea.

Me gustaría evitar escribir un DSL (¿una barrera para la adopción?), Y preferiría que el lenguaje que escribe el usuario sea JavaScript o basado en Ruby.

Mi preocupación obvia es la seguridad. Entiendo los peligros de permitir que el código generado por el usuario se ejecute en el lado del servidor, pero ¿qué pasos puedo tomar para eliminar el riesgo?

¿Los sitios como http://railsforzombies.com realmente usan irb, o es mucho más simple que eso?

Respuesta

1

¿Consideraría Java (u otros lenguajes de JVM como JRuby, Scala, Clojure, etc.)? Si es así, hay una gran cantidad de poder en la JVM para restringir los privilegios de una aplicación de espacio aislado. Consulte esta otra pregunta para obtener más información: How do I create a Java sandbox?

1

Google Caja le permite insertar con seguridad el Javascript especificado por el usuario en su sitio web, pero creo que podría estar destinado a ejecutar el código en el navegador del usuario y no en su servidor. No lo he usado yo mismo.

No sé si hay soluciones ya preparadas para otros idiomas, pero creo que una solución personalizada implicaría recompilar el intérprete usted mismo después de eliminar todas las bibliotecas de API que permiten al usuario escribir en el disco, abrir conexiones de red, fork procesos/hilos, y hacer cualquier otra operación peligrosa o de denegación de servicio. Incluir en la lista blanca bibliotecas "seguras" es el único enfoque que podría funcionar para eso.

Sería más seguro si tuviera servidores virtuales separados para usuarios individuales.

+0

Caja no hace sandbox contra los ataques de denegación de servicio. No tiene defensa contra un usuario que ejecuta un bucle eterno 'while (true) {}' o asignando mucha memoria. Javascript en un iframe de espacio aislado tiene las mismas garantías de seguridad (y falta de protección de dos) que Caja, siendo más simple de usar y más estándar. – AgentME

Cuestiones relacionadas