2011-08-23 10 views
5

Hay algunos sitios web (como este one) que permiten a los usuarios enviar código en diferentes idiomas y el sistema compila y ejecuta casos de prueba en ellos. Como desarrollador, tengo curiosidad por saber cómo lo hacen y cómo soportan varios idiomas (PHP, Python, C, .NET, javascript).¿Cómo compilar y ejecutar código dinámicamente?

¿No es posible que el código enviado sea malicioso y ponga en peligro el entorno en el que ejecutan el código?

Gracias.

Respuesta

0

No puedo hablar de ese sitio en particular, pero generalmente crean un entorno restringido, llamado sandbox. Dentro de este entorno, pueden restringir aún más la disponibilidad de funciones para los programas que se ejecutan allí. Esto también podría hacerse bloqueando ciertas llamadas API dentro del idioma.

Chroot en * nix es una forma de crear un sandbox.

+0

¿Hay alguna manera de crear un entorno limitado en un entorno de Windows? – Nick

+0

En la parte superior de mi cabeza puedo pensar en una solución de máquina virtual como VirtualBox o VM Ware, y Google encontró esto como primer enlace para sandboxing + windows - http://downloadsquad.switched.com/2009/03/11/five -sandboxing-apps-to-protect-your-windows-computer / – arunkumar

3

tengo curiosidad por saber cómo lo hacen y cómo soportan varios idiomas (PHP, Python, C, .NET, javascript)?

Simple: tiene instaladas varias instalaciones de idioma e invoca el correcto para la entrada dada (que por supuesto está dada por el usuario).

¿No es posible que el código enviado sea malicioso y ponga en peligro el entorno en el que ejecutan el código?

Sí, por supuesto. Sin embargo, hay innumerables contramedidas potenciales. Ensanche el proceso en algunas de las diversas formas desarrolladas a lo largo de los años, eliminando el proceso después de un tiempo determinado, impidiendo el acceso a funcionalidades potencialmente peligrosas, etc. Consulte Codepad's about page para saber qué dice un sitio real al respecto.

Cuestiones relacionadas