Evitar que la aplicación introduzca cambios perjudiciales en el lado del servidor

Este es solo mi pequeño proyecto de hobby en PHP. Yo uso el servidor de 0sites.org (sistema operativo Linux). Básicamente, bash imitar las funcionalidades de http://www.codepad.org , http://www.ideone.com . Estoy tratando de tener un comstackdor / intérprete en línea para algunos lenguajes.

A partir de ahora, puedo comstackr / ejecutar las aplicaciones con PHP exec(..) , pero realmente no estoy seguro de cómo voy a filtrar las llamadas a funciones dañinas como el sistema C / C ++ system(..) . Además, tengo poca idea de cómo voy a evitar el acceso a la red.

También tengo planeado agregar algunos idiomas más. Sería difícil implementar cosas específicas para cada idioma. Me pregunto si hay una forma de que pueda detener las cosas a un nivel más general.

He pensado en las líneas de analizar el código manualmente y comentar las líneas problemáticas de código. Pero dado que generalmente hay más de una forma de hacer las cosas, esto se puede romper. :-PAG

¿Alguna idea / sugerencia / puntero? Estaré muy agradecido por lo mismo. 🙂

(PD: Este es solo un proyecto de hobby. Solo quiero hacerlo lo más profesional posible …)

Probablemente necesites soporte de SO para crear estas cajas de arena. Cualquier enfoque que implique el filtrado del código fuente va a tener problemas de seguridad, y será una pesadilla para mantener.

Solo piense: incluso si implementa su analizador de forma completamente correcta, podría haber un error en el analizador de PHP, por lo que analiza de forma ligeramente diferente. Eso podría permitir fácilmente que alguien ejecute el sistema, el ejecutivo, etc. y se desvíe por completo de su filtrado.

No te has topado con un proyecto de pasatiempo; te has tropezado con un proyecto de investigación.

editar 1

La manera más segura en que puedo pensar para hacer esto sin compatibilidad con el sistema operativo es parchear PHP (pero estarías trabajando en C luego, no en PHP), o para volver a implementar PHP en PHP. Pero ten en cuenta lo loco que es esto. ¿Estás seguro de que sabes lo que las innumerables bibliotecas vinculadas pueden hacer, especialmente cuando se les dan argumentos divertidos? Por ejemplo, es posible que desee prohibir la escritura en archivos, pero permita MySQL. Excepto que MySQL tiene comandos SQL que escriben en archivos arbitrarios.

http://codepad.org/about dice que está hecho con soporte de sistema operativo. Tal vez puedas hacerte un módulo ptrace para PHP e implementar el tuyo de forma similar.

Una sugerencia es asegurarse de que el usuario que ejecutará esos scrips no podrá leer / escribir nada más que la carpeta en la que se ejecutará. Además, la aplicación en sí misma no debería poder ser escrita por ese usuario.