2008-09-16 22 views
17

P. ej. ¿Es más seguro usar mod_php en lugar de php-cgi? ¿O es más seguro usar mod_perl en lugar del tradicional cgi-scripts?¿Hay alguna diferencia entre apache module vs cgi (concerniente a la seguridad)?

Me interesan principalmente los problemas de seguridad, pero la velocidad puede ser un problema si hay diferencias significativas.

+2

Entiendo que esta pregunta es antigua, pero ¿ahora no debería ir a ** Server Fault **? –

+0

@smarinov, debería. Pero SO tiene una política extraña cuando se trata de hilos viejos, que resume en una palabra: "pereza". ASÍ NO CUIDA – Pacerier

Respuesta

15

¿Seguridad en qué sentido? De cualquier manera, realmente depende de qué script se está ejecutando y de qué tan bien está escrito. Demasiadas secuencias de comandos en estos días son medio pesadas y no hacen correctamente la validación de entrada.

Personalmente prefiero FastCGI a mod_php ya que si un proceso FastCGI muere se generará uno nuevo, mientras que he visto mod_php matar a la totalidad de Apache.

En cuanto a la seguridad, con FastCGI podría ejecutar técnicamente el proceso de php con un usuario diferente del usuario de servidores web predeterminado.

En una nota aparte, si está utilizando la nueva compatibilidad con subprocesos de trabajo de Apache, querrá asegurarse de no estar utilizando mod_php ya que algunas de las extensiones no son seguras para hilos y provocarán condiciones de carrera.

+0

He estado con mod_php desde hace un año y nunca he visto un proceso secundario matar a la totalidad de Apache. – wlf

+2

@wlf: Me alegra oírlo. –

+1

@wlf, 1 año es apenas largo. 3 años ahora. Entonces, ¿todavía está vivo? – Pacerier

2

El uso de un módulo integrado definitivamente va a ser más rápido que el uso de CGI. Las implicaciones de seguridad dependen de la configuración. En la configuración predeterminada, son prácticamente iguales, pero cgi permite algunas configuraciones más seguras que los módulos integrados no pueden proporcionar, especialmente en el contexto del alojamiento compartido. ¿Sobre qué exactamente quieres asegurarte?

+1

No tengo ninguna amenaza en particular en mente. Pero hay varias páginas alojadas en la misma máquina. – Sarien

+0

Debe decidir primero de qué quiere protegerse. ¿Son esas páginas propiedad de la misma persona/institución? Si no es así, debe considerar cualquiera de las diversas soluciones para ejecutar diferentes scripts php como usuarios diferentes, por ejemplo (suphp, utilizando hosts virtuales y proxy inverso, y otros) –

+0

@VinkoVrsalovic, el modelo de amenaza habitual. Evite que las miradas indiscretas lean el código fuente de PHP. – Pacerier

5

La mayoría de los agujeros de seguridad se producen debido a la mala programación en el script en sí, por lo que es realmente discutible si se ejecutan como CGI o en módulos. Dicho esto, los módulos de apache pueden bloquear potencialmente todo el servidor web (especialmente si se utiliza un MPM enhebrado) y mod_php es famoso por ello.

cgi será más lento, pero hoy en día hay soluciones para eso, principalmente FastCGI y amigos.

¿Cuál es su modelo de amenaza?

+0

Si el script es débil, no significa que dejamos de proteger el servidor. Ambos necesitan ser fuertes. El modelo de amenaza es evitar el acceso de archivos a personas no autorizadas. El acceso solo debe hacerse a través de scripts PHP. – Pacerier

4

Desde el doc install.txt PHP para PHP 5.2.6: módulos

Server proporcionan un rendimiento significativamente mejor y funcionalidad adicional en comparación con el binario CGI.

Para IIS/PWS:

Advertencia

Mediante el uso de la configuración de CGI, el servidor está abierto a varios posibles ataques . Por favor, lea nuestra sección de seguridad CGI para aprender cómo defender usted mismo de esos ataques.

+0

* "Lea nuestra sección de seguridad CGI" * ... ¿dónde? – Pacerier

8

Si ejecuta su propio servidor vaya por el módulo, es algo más rápido. Si está en un servidor compartido, la decisión ya se tomó, generalmente en el lado de CGI. La razón de esto son los permisos del sistema de archivos. PHP como módulo se ejecuta con los permisos del servidor http (generalmente 'apache') y, a menos que pueda modificar sus scripts a ese usuario, debe modificarlos al 777, legible en todo el mundo.Esto significa, por desgracia, que su vecino del servidor puede echarles un vistazo; piense en dónde almacena la contraseña de acceso a la base de datos. La mayoría de los servidores compartidos han resuelto esto usando cosas como phpsuexec y similares, que ejecutan scripts con los permisos del propietario del script, por lo que puedes (debes) tener tu código como 644. Phpsuexec solo funciona con PHP como CGI, eso es más o menos todo , es solo una cosa de la máquina local, no hace ninguna diferencia para el mundo en general.

+2

644 sigue siendo legible en todo el mundo. – Forest

+0

[La configuración de CGI es más segura,] (http://blog.layershift.com/which-php-mode-apache-vs-cgi-vs-fastcgi/). pero más lento. Pero también vea http://stackoverflow.com/a/10439720/632951 – Pacerier

3

Un módulo como mod_php o FastCGI es increíblemente más rápido que el CGI simple ... simplemente no haga CGI. Como han dicho otros, el programa PHP es la mayor amenaza a la seguridad, pero ignora que existe otra consideración en los hosts compartidos.

Si su script está en un host compartido con otros programas php y el host no se ejecuta en modo seguro, entonces es probable que todos los procesos del servidor se estén ejecutando como el mismo usuario. Esto podría significar que cualquier otra secuencia de comandos php puede leer la suya, incluidas las contraseñas de la base de datos. Así que asegúrese de investigar la configuración del servidor para asegurarse de que su código no sea legible para otros.

Incluso si controla su propio alojamiento, tenga en cuenta que otra aplicación web pirateada en el servidor podría ser un conducto para otros.

Cuestiones relacionadas