2012-02-11 11 views
6

Estoy desarrollando una plataforma que permite a los usuarios crear aplicaciones usando PHP. ¿Hay alguna manera segura de permitir que los usuarios hagan esto? ¿Puedes restringir el uso de funciones que podrían dañar el código fuente existente o el servidor de todos modos? Solo quiero que puedan usar funciones básicas y darles acceso a 1 base de datos. Esto debe ser posible, debido a la existencia de servidores compartidos, ejecutados por muchos usuarios. ...¿Existe alguna forma segura de permitir que los usuarios agreguen su propio PHP a mi servidor?

¿Algún consejo?

Respuesta

3

Puede enumerar todas las funciones deshabilitadas en su php.ini. Puede configurarlo de manera diferente para cada host virtual

disable_functions = "exec,passthru" 

Los alojamientos compartidos solo hacen lo mismo que dije anteriormente.

Otras funciones que se pueden considerar diable: readfile, fopen, fsockopen, popen, file_get_contents, incluir, stream_context_create, chmod, chown

lista completa se puede encontrar here

Pero si se están utilizando estas funciones dentro de su código también, es mejor hacer que todos los archivos de código sean solo para el usuario de apache o para todos, en este caso, la desactivación de chown y chmod juegan un papel importante.

+1

También puede hacer esto en una configuración de vhost. – remy

+0

@remy buena captura.Editado –

+0

¿cuál es el objetivo de deshabilitar eval? –

1

Solía ​​ejecutar un servidor compartido usando PHP safe mode, pero aparentemente ahora está en desuso.

Una mejor solución es ejecutar los procesos de PHP de cada usuario con una cuenta de usuario diferente, en una cárcel chroot, y dejar que el sistema operativo se preocupe por la seguridad. Los usuarios podrán cargar y ejecutar código arbitrario, pero en la medida en que esté adecuadamente aislado, no podrán causar mucho daño.

También puede usar la cuota de disco. Utilice ulimits para el uso de memoria por usuario y considere no permitir conexiones de red (entrantes y salientes).

Para la base de datos, simplemente configúrelos con una sola base de datos, con acceso solo a los suyos, y no les dé privilegios para crear más.

3

Nunca hice esto antes, pero creo que este enfoque puede ayudarlo con un entorno sano y seguro.

Si está en ubuntu (basado en debian) le recomiendo que cree un jailed chroot. Desde el enlace

Un chroot es básicamente un directorio especial en su ordenador, lo evita que las aplicaciones, si se ejecuta desde dentro de ese directorio, desde accede a los archivos fuera del directorio. En muchos sentidos, un chroot es como instalando otro sistema operativo dentro de su sistema operativo existente.

También debe instalar una instancia dedicada de PHP que debe ser utilizada por las aplicaciones ejecutadas desde el interior de los directorios chroot'd.

Puede configurar el php.ini con "max_execution_time", "disable_functions", etc ...

esto es exactamente lo que necesita realmente.

Cuestiones relacionadas