2012-06-29 17 views
8

Estoy intentando crear un sitio de codificación educativo, similar al Codecademy, pero francamente no sé qué pasos debo seguir. ¿Podría señalarme en la dirección correcta al incluir incluso un simple intérprete de Python en una aplicación web?Cómo incrustar un intérprete de Python en un sitio web

+0

No soy el más experimentado en herramientas de desarrollo web. ¡Espero aprender todo lo que pueda de un proyecto con un objetivo ambicioso! – twoxmachine

+0

Eche un vistazo a esto: http://doc.pypy.org/en/latest/sandbox.html – ChristopheD

+0

Muchas gracias, @ChristopheD. Lo leeré. – twoxmachine

Respuesta

8

Una opción podría ser usar PyPy para crear un pitón de espacio aislado. Limitaría las operaciones externas que alguien podría hacer.

Una vez que tenga esa configuración, su sitio web tomará el código fuente, lo enviará a ajax a su servidor web, y el servidor ejecutará el código en un subproceso de una instancia de sandboxed python. También podría matar el proceso si tardara más de 5 segundos. Luego devuelve la salida como respuesta al cliente.

Consulte estos enlaces para obtener ayuda en una caja de arena PyPy:
http://doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html

Para crear un REPL totalmente interactivo sería aún más complicado. Debería mantener vivo un intérprete para cada cliente en su servidor. A continuación, acepte ajax "líneas" de entrada y ejecútelas a través de la interpo comunicándose con el proceso en ejecución, y devuelva la salida.

En general, no es trivial. Necesitarás algunas habilidades fuertes de desarrollo para hacer esto cómodamente. Puede encontrar esta tarea un poco intimidante si solo está aprendiendo.

+0

Gracias por esbozar los pasos que tendré que tomar. Pensé que un proyecto como este podría ser difícil. ¡Estoy agradecido de que hayas tomado el tiempo para mostrarme las cuerdas! – twoxmachine

3

Aquí hay más para hacer de lo que cree.

El principal problema es que usted no puede permitir que las personas ejecuten código Python arbitrario en su servidor web. Por ejemplo, qué sucede si lo hacen

import os 
os.system("rm -rf *.*") 

Así que claramente tiene que ejecutar este código de Python de forma segura. Pero luego tiene el problema de asegurar Python, que es básicamente imposible debido a lo dinámico que es. Y entonces probablemente deba ejecutar el shell de Python en una máquina virtual, que viene con sus propios dolores de cabeza.


¿Has visto p. http://code.google.com/p/google-app-engine-samples/downloads/detail?name=shell_20091112.tar.gz&can=2&q=?

+0

Pasando por algunas búsquedas, estaba al tanto de algunos de los problemas de seguridad involucrados al permitir código arbitrario. Gracias por mostrarme un ejemplo real, ¡me aclaro un poco! Revisaré el shell AJAX que ha vinculado para tratar de descubrir cómo se implementó. Te agradezco que me lo hayas mostrado. – twoxmachine

1

Una opción reciente para esto es usar repl.

Esta opción es impresionante porque los compiladores se hacen usando JavaScript por lo que la compilación y ejecución se hace en el usuario del lado, lo que significa que el servidor está libre de vulnerabilidades.

Ellos tienen compiladores para: python3, Python, Javascript, Java, Ruby, PHP ...

os recomiendo que compruebe su sitio en http://repl.it

1

Mira en LXC Contenedores. Tienen una API muy buena que puedes usar para crear contenedores ligeros de linux. Podría ejecutar los comandos del subproceso dentro de ese contenedor para que el usuario final no pueda meterse con su servidor principal.

Cuestiones relacionadas