“¿Cómo puedo construir un sitio web para compilar código?” Es un objetivo demasiado ambiguo para considerar siquiera proporcionar una respuesta razonable que lo guíe en la dirección correcta. ¿Cuál es el problema que estás tratando de resolver aquí? ¿Cuáles son las restricciones? La pregunta, como se indicó, es demasiado abierta, y podría hablar durante horas sobre varias técnicas, cada una con sus propios pros y contras para lograr esto. Debido a la forma en que se formula la pregunta (al menos originalmente), considero que esto es un esfuerzo muy arriesgado y me siento incómodo sin intentar explicar brevemente por qué es una mala idea dar una respuesta sobre una posible forma de construir tal un sitio.
Qué idioma estás usando? Digamos, en aras de la discusión, que desea utilizar JavaScript. Bueno, en ese caso, la mejor manera de hacerlo es no hacer absolutamente nada (¡hurra, hemos escrito todo para hacer esto!) El navegador ya puede ejecutar JavaScript localmente.
Para un argumento alternativo, supongamos que desea ejecutar directamente en el hardware. Vayamos con el ensamblaje esta vez (sí, técnicamente, este lenguaje está ensamblado en lugar de compilado, pero agitemos nuestra varita de nomenclatura sobre la pedantería). Bueno, obviamente, cualquier máquina que seleccione es la incorrecta, obviamente, la entrada que le estoy dando está destinada a una máquina diferente (o incluso mejor, ¡a una máquina hipotética!).
Poniéndonos un poco más serios, digamos que te referías a uno de los lenguajes más “portátiles” como C. Bueno, ahora quiero usar la funcionalidad de una biblioteca aleatoria. Afortunadamente, hay muchas bibliotecas, por lo que solo necesita instalar cada pieza de software que se haya escrito (obviamente, esto no es realmente razonable ni serio).
- Estoy tratando de hacer un camino hacia el modo de carrera Gloria en FIFA 15 (llevar un equipo de la Liga 2 a la Premier League). ¿Qué debo tener en cuenta para esto?
- Quiero visitar la misma ciudad durante dos fines de semana cada mes. ¿Cuál sería la forma más barata de encontrar alojamientos recurrentes?
- Estoy desempleado, obtuve una pasantía bien remunerada, pero tengo 1.5 años de experiencia en Java, ¿debo realizar una pasantía o seguir buscando trabajo?
- Creo que las personas que juzgan rápidamente son estúpidas en general. Pero, ¿las personas inteligentes también son rápidas para juzgar?
- Si me gusta jugar videojuegos, ¿implica que debería ir a diseñar un juego como carrera?
En aras de la discusión, supongamos que tiene una máquina mágica que le ha permitido ejecutar un código arbitrario (arquitectura correcta, sistema operativo, conjunto de bibliotecas, variables de entorno, …). ¿Cuál es este código que estás aceptando? ¿Sabes lo que hace? Probemos este fragmento de código C:
int main () {
sistema de retorno (“sudo ‘rm -rf /'”);
}
Este es obviamente un código malicioso que causa la pérdida de datos (obviamente, no es muy efectivo si sus permisos están configurados correctamente, pero supongamos que hay alguna vulnerabilidad que puedo aprovechar), por lo tanto, permitir la ejecución de entradas arbitrarias quizás no sea una buena idea . Ahora, déjame darte otro fragmento:
int main (int argc, char ** argv) {
sistema (argv [0]);
sistema (argv [0]);
devuelve 0;
}
De nuevo, un código malicioso, esta vez causando un ataque DoS.
No sabe si la ejecución del código se completará o no (si lo hizo, ¡simplemente resolvió el problema de detención!). No sabes si el código es malicioso o no. Hay muchas razones por las cuales permitir la ejecución arbitraria de código es una idea muy peligrosa.
Si todavía está leyendo hasta aquí, permítame al menos intentar explicar a un alto nivel cuál es una forma posible de lograr este objetivo potencialmente peligroso.
En general, puede tomar como entrada el código fuente para compilar y un comando de compilación para invocar. Puede lograr esto fácilmente como una solicitud POST. En el lado del servidor, puede crear un archivo temporal con el contenido (código fuente) que recibió. También tiene el comando para ejecutar para compilar este código que debería darle un binario que puede ejecutar. Ejecuta este comando con el contenido del código que acaba de escribir en el archivo temporal. Luego, tiene un archivo binario que puede ejecutar.