Page tree
Skip to end of metadata
Go to start of metadata

Esta página provee detalles sobre por qué ofrecemos ciertas sugerencias para fortalecer su configuración de PHP. 

El modo seguro (safe mode)

La característica de modo seguro (safe_mode) de PHP trata de imponer permisos de lectura y escritura en los entornos de hospedaje compartidos para PHP. Normalmente, un script de PHP puede abrir y modificar cualquier archivo en el filesystem. El activar safe_mode causa que PHP verifique la identificación de usuario (UID) del script cuando trata de abrir un archivo contra el UID de ese archivo (o directorio). Si las identificaciones de usuario no son iguales, el script no puede abrir o modificar el archivo o directorio. Esto previene que los usuarios accedan archivos que no les pertenecen con PHP. Esto evita que los atacantes exploten las inseguridades de lectura y escritura e inyecten código malicioso dentro de otros scripts con PHP.

Puede relajar la verificación de archivo del modo seguro (safe mode) a una identificación de grupo (GID), en vez de una verificación UID (safe_mode_gid). Esto puede ser útil si safe_mode es demasiado restrictivo para usarlo en su entorno. Por ejemplo, si varios desarrolladores con diferentes identificaciones de usuario requieren la habilitad de abrir y modificar el mismo archivo o directorio con PHP, puede activar safe_mode_gid Esto causa que PHP verifique las identificaciones de grupo del script y del archivo, en vez de las identificaciones de usuario. Esto permitirá que varios desarrolladores abran y modifiquen el mismo set de archivos, siempre y cuando estén en el mismo grupo.

Además de activar safe_mode o safe_mode_gid, usted también puede escoger restringir cuáles directorios pueden contener archivos incluidos (included) o ejecutables. Bajo condiciones predeterminadas, cualquier directorio en el filesystem puede contener archivos de PHP incluidos (included) o ejectuables. Esto es peligroso. 

Restringir los includes

Los ataques de include locales ocurren cuando un atacante puede sacar archivos locales y ponerlos dentro de scripts de PHP para ver información confidencial dentro de o sobre su sistema. Por ejemplo, un atacante puede incluir y luego ver el archivo /etc/passwd con una vulnerabilidad de inclusión (inclusion) de PHP, donde el atacante obtiene cualquier información básica sobre todas las cuentas asociadas con su servidor web.

Para ayudar a prevenir vulnerabilidades de include locales, usted puede configurar el parámetro open_basedir a un directorio específico en su configuración de PHP. Esto limitará el acceso de un atacante, mediante includes locales, a un solo directorio. En la mayoría de los casos, usted querrá configurar el parámetro open_basedir en un directorio public_html Esto permitirá que PHP abra y modifique archivos accesibles con HTTP (públicos) ubicados dentro del directorio especificado, mientras limita el acceso a la información más confidencial contenida fuera del directorio especificado.

Los ataques remotos de archivo include ocurren cuando un atacante puede sacar archivos desde una ubicación remota y ponerlos en su servidor. Cuando se usan includes remotos, un atacante escribirá un script de PHP y lo alojará en su propio servidor. Luego, usará un método de inclusión remoto para cargar y ejecutar el script en su servidor. Si su configuración de PHP no es segura, un atacante no necesita tener permisos de escritura y lectura en su servidor para cargar y ejecutar elscript malo. Para prevenir ataques remotos de archivos de inclusión (inclusion), configure los parámetros allow_url_fopen yallow_url_include a Off

Desactivar la funcionalidad

Algunas funciones de PHP no son seguras para un entorno de producción. Aunque sus desarrolladores de PHP tal vez no usen estas funciones, usted debe desactivarlas para que un atacante tampoco las pueda usar. En la mayoría de los casos, el desactivar estas funciones frenará un atacante que ha podido colocar un script de PHP malicioso en su sistema. Si desactiva la función, el script malicioso no funcionará. O sea, el desactivar alguna funcionalidad limitará la habilidad de un atacante de cumplir acciones maliciosas en su sistema con PHP.

Cuando selecciona las funciones que desea desactivar, tal vez sea importante consultar con sus desarrolladores de PHP. Hay muchas funciones de PHP que básicamente cumplen las mismas tareas. El requerir que sus desarrolladores estandaricen una o dos funciones prevendrá que los atacantes usen las otras funciones en su contra. 

Prevenir revelar información

El revelar información, a los atacantes, como errores, puede dejar su sistema en una posición vulnerable. Antes y durante un ataque, el atacante tendrá que adquirir una gran cantidad de información en general sobre su sistema. Esta información incluye la estructura de su directorio, los nombres de las bases de datos, los nombres de usuario y más. Prevenir que PHP imprima errores en la interfaz del usuario de la aplicación web es una manera de impedir que un atacante obtenga información que podría usar para comprometer su sistema.

Cuando se desactiva display_errors, sus desarrolladores aún pueden recuperar la información de depuración de los registros de PHP apropiados. 

Restringir las cargas de archivo

Restringir todas las cargas de archivo es una manera fácil de completamente evitar que los atacantes no exploten su configuración de PHP con la intención de inyectar sus propios scripts de PHP. Sin embargo, algunos desarrolladores desearán incluir la habilidad de cargar archivos a su servidor por PHP. Si tiene que permir las cargas de archivo, debe cambiar el directorio temporero predeterminado para cargas de archivo con el parámetro upload_tmp_dir

Muchos administradores también deciden limitar el tamaño máximo del archivo que los usuarios pueden cargar con el parámetro upload_max_filesize La intención de configurar este parámetro, por lo general, no es para mejorar la seguridad de su configuración PHP. En cambio, los administradores deciden configurar este parámetro para que les ayude a administrar la carga de PHP del servidor. 

Proteger las sesiones

Algunos atacantes tratan de secuestrarse las sesiones. Esto ocurre cuando un atacante tiene la habilidad de robar la sesión de aplicación web de un usuario y tomar acciones como si fuera ese usuario. PHP usa identificadores de sesión largos y generados al azar para sus URL. Aunque esto causa que los URL de sesión sean difíciles de adivinar, se debe almacenar el valor dentro del filesystem. Esto hace posible que un atacante recupere las identificaciones de sesión.

Los atacantes pueden inyectar JavaScript en las páginas para robarse cookies (o sea, secuestrar sesiones). Puede evitarlo al configurar el parámetro session.cookie_httponly a On. Esta directiva previene que JavaScript acceda las cookies de una sesión de aplicación de PHP. Si sus desarrolladores requieren que JavaScript tenga acceso a las cookies de sesión, no active esta opción.

También podrá permitir que PHP revise los valores de referrer de HTTP. Esto asegura que la información confidencial de sesión sólo se transfiera internamente durante una sesión de usario. En efecto, esto evita que los usuarios accidentalmente publiquen información confidencial de sesión cuando comparten un URL. 

Desactivar los registros globales

Las variables globales permiten que un script de PHP reciba y procese variables sin una fuente especificada. Esto es peligroso porque los atacantes podrían sobrescribir las variables de configuración y obtener acceso a áreas de su sistema que normalmente están restringidas.

  • No labels