Crear un sitio web para ejecutar el código

Actualmente estoy desarrollando un sitio web de concurso de progtwigción y quiero implementar soporte para enviar código y ejecutarlo en el sitio web. Después de bastante googlear, todavía no he encontrado ninguna “guía” para esto.

¿Alguien sabe de un sitio web (u otras fonts) que contiene algunas pautas básicas o reglas básicas para esto?

Apreciar todas las respuestas.

PD: Si alguien se pregunta sobre todas las tags de lenguaje de progtwigción, estoy planeando apoyar al menos estos idiomas.

Cuidado: si le resulta difícil dividir este proyecto en algunos problemas más pequeños y tácticos, le sugiero encarecidamente que no intente en absoluto ejecutar el código de otra persona en su sitio. En términos de crear el sitio en sí, sugiero aprovechar componentes o servicios preconstruidos cuando sea posible: WordPress, GitHub, etc.

Una vez que tenga los envíos, querrá tener una forma de ejecutarlos de manera segura . Para todos los propósitos prácticos, esto significa que debe suponer que cualquier máquina en la que ejecute el código de otra persona podría estallar espontáneamente en llamas. Si bien es cierto que algunos de estos idiomas tienen características que usted debería poder usar para ejecutar código en un “entorno limitado”, probablemente no sea lo suficientemente experto en todos estos idiomas para poder asegurarlos adecuadamente.

Parece que algo como el EC2 de Amazon podría ser útil: haz girar una máquina virtual cuando necesites ejecutar una presentación, y tírala cuando hayas terminado. Tienen algunas imágenes preconfiguradas que probablemente sean adecuadas para ejecutar este código, y si algo se enloquece debido a errores o códigos maliciosos, no te importa demasiado porque solo vas a lanzarlo de distancia cuando hayas terminado.

Hay un sitio que ya lo hace, aunque para un propósito particular: raspado de datos.

https://scraperwiki.com/ – A diferencia de jsfiddle, scraperwiki ejecuta el código del lado del servidor. Por lo que puedo deducir, es probable que quiebren el entorno a través de instancias de Amazon. No estoy seguro de que su código pueda auditarse y desinfectarse por completo, dada la variedad de idiomas y bibliotecas de fragmentación que admiten.

Creo que la mayoría de la gente está desconcertada sobre cómo scraperwiki mantiene a raya a los piratas informáticos y a los spammers a causa del mal uso de sus recursos. Han sido bastante parcos sobre eso; o bien han auditado manualmente cada bit de código ejecutado, o los hackers / spammers aún no los han detectado. Dado que el sitio tiene una función específica, probablemente verifiquen la utilización de datos para determinar la actividad sospechosa. … pero, el raspado del sitio de un hombre es el acoso y la inyección de otro hombre por get / post.

Mi presentimiento es que nunca deletrearán públicamente cómo es su proceso de auditoría de seguridad.

Si realmente tenía que hacerlo, la forma mecánica más simple de hacer esto sin virtualización es usar una variante de eval () . Pero, no todos los idiomas tienen eso. Lo que te lleva a la opción B, que es la virtualización . Hay mejores personas de las que puedo explicar cómo regimentar las máquinas virtuales para este fin, y se lo advertiré correctamente al permitir que extraños abusen de sus recursos. En cambio, compartiré mi experiencia de PHP.

Hace algunos años hice un proyecto que ejecuta código sobre la marcha (en una máquina local). A medida que escribe, toma el código a través de ajax y lo ejecuta después de cada pulsación de tecla. Aquí hay un video de su comportamiento: http://www.youtube.com/watch?v=Yfxrt2pc3pg .

Media década y 3 prototipos de mejora más adelante, todavía no estoy seguro de cómo lo cerraría responsablemente como un recurso común.

Para Java es bastante simple:

  • Debe crear Servlet para cargar el código fuente en el servidor (por ejemplo, mediante solicitud POST)

  • Use la API del comstackdor Java para comstackr el código fuente en bytecode ( tutorial )

  • Comstackdo bytecode que puede cargar dinámicamente a través de ClassLoader y ejecutarlo (también puede configurar SecurityManager )

  • Y no te olvides de la architecture MVC 🙂