Asegurar PHP con php.ini

En el post anterior vimos como podemos establecer las directivas de PHP para cada subdominio, ahora toca asegurar y proteger nuestro código PHP utilizándolo.

Voy a remitiros a este fantástico manual en inglés en el cual dan las pautas para asegurar, proteger y endurecer nuestras páginas PHP con directivas de configuración que no vienen habilitadas por defecto.

  1. Modo seguro (obsoleto desde PHP 5.4)
  2. Restringir los directorios desde donde podremos incluir archivos PHP y trabajar con ficheros (escritura, lectura), en resumen limitar el acceso de PHP al sistema de archivos.
  3. Deshabilitar funciones peligrosas como eval.
  4. Evitar que se muestre errores en pantalla
  5. Deshabilitar register globals (obsoleto desde PHP 5.4)
  6. Evitar que archivos remotos puedan ser abiertos e incluidos con PHP, la consecuencia más drástica de esto es que la función file_get_contents no podrá recibir nada con el protocolo http como parámetro, en su lugar deberemos usar curl.
  7. Restringir la subida de archivos y de no ser posibles establecer una carpeta temporal de subida segura y un tamaño máximo, podéis ver más detalles de como hacer una subida de archivos con PHP segura en el enlace así como los métodos usados por hackers para vulnerar las comprobaciones que habitualmente se hacen.
  8. Proteger las sesiones.

Adicionalmente en este otro post también en inglés nos dan otras pautas para asegurar nuestro código PHP y además una breve explicación´n de los tipos de ataques que podemos sufrir.

  1. Deshabilitar módulos de PHP que no utilicemos, esto además ayuda al rendimiento.
  2. Restringir la información que se muestra sobre la versión de PHP que tenemos instalada.
  3. Controlar y establecer el tamaño de lo que podamos recibir por post.
  4. Evitar ataques de denegación de servicio estableciendo el límite de los recursos y tiempos que los scripts pueden utilizar.
  5. La directiva de configuración cgi.force_redirect que previene a cualquiera que llame a PHP directamente por medio de una URL. (solo probada en servidores apache)
  6. Evitar que el usuario que ejecuta PHP sea root o con un UID menor que 100 para que no pueda manipular archivos de sistema.
  7. Tener siempre todo actualizado.
  8. Restringir los permisos de los directorios.

Otra vulnerabilidad de PHP puede ser la suplantación de identidades utilizando las variables de sesión, algo que se conoce como CSRF/XSRF o session fixation. La opción menos segura es utilizar Session.referer_check, fácil de desviar al buscar una sub cadena en el dominio recibido. Si la sub cadena no se encuentra completa el identificador de sesión no será válido. Sin embargo, precisamente por buscar una sub cadena y no una cadena completa, entonces se podría pasar por alto para www.somedomain.com refiriendo desde www.somedomain.com.some_hacker.com. En resumen, creo que es completamente inútil si queremos detener ataques. La opción más segura es Session.use_only_cookies porque un hacker nunca puede establecer cookies en el ordenador de un usuario de un dominio que no controla.

Espero que con estas pautas podáis asegurar y proteger vuestro código PHP lo más posible frente a posibles ataques.

Comentarios