¿Por qué proteger archivos con información sensible con .htacces?

2

Me enseñaron que un paso importante para asegurar un sitio web (principalmente con PHP) era almacenar toda la información confidencial, como la información de conexión a la base de datos, la generación de sal, etc. en un archivo (s) / Carpeta (s) por separado y uso .htaccess con algo como deny from all para evitar el acceso a esa información, y de otro modo acceso no autorizado al sitio / base de datos.

Mi pregunta es, ¿hasta qué punto esto es útil? En mis entornos web, no se puede acceder / descargar esos archivos (que yo sepa). No hay un explorador de archivos basado en la web para acceder a esa información, y mientras la información no se imprima en la pantalla, ¿por qué es necesario restringir el acceso a esos archivos más allá de eso?

    
pregunta sharf 18.11.2014 - 03:44
fuente

1 respuesta

6

Por lo tanto, está almacenando contraseñas de la base de datos y secretos criptográficos en un archivo dentro de la raíz web, posiblemente porque el alojamiento web de bajo nivel no tiene otro almacenamiento para estos secretos. Al ingresar el nombre de este archivo como ruta en una solicitud HTTP GET , se recuperará su contenido. Incluso si no proporciona un "explorador de archivos no basado en la web", un usuario malintencionado puede terminar adivinando correctamente el nombre de este archivo de clave secreta a menos que su nombre sea criptográficamente aleatorio. O alguien que sabe el nombre del archivo puede filtrar el nombre a una parte maliciosa.

El archivo .htaccess en el servidor HTTP Apache, o archivos análogos en otros servidores web, está diseñado para evitar el acceso directo a un archivo a través de la web incluso si un cliente conoce su nombre. Esto es útil en dos situaciones:

  • Supongamos que almacena secretos en un archivo JSON que su script PHP carga con file_get_contents() cuando se inicia. El .htaccess bloquearía a un usuario que ingrese la URL de este archivo JSON.
  • Supongamos que almacena secretos en un script PHP que contiene asignaciones a variables globales, que su script PHP incluye con require_once cuando comienza. Por ejemplo, el LocalSettings.php de MediaWiki utiliza este enfoque. Normalmente, una secuencia de comandos de configuración de variables no producirá ningún resultado. Pero he visto situaciones ocasionales en las que mod_php o el controlador CGI no se cargan accidentalmente, lo que hace que Apache, en cambio, sirva los archivos PHP como texto sin formato, incluidos sus secretos. El .htaccess bloquearía a un usuario que ingrese la URL de este archivo PHP.

Pero tenga cuidado: .htaccess no impide el acceso a través de un script, como si un script toma un nombre de archivo como argumento y devuelve el contenido de ese archivo. Así que asegúrese de que todos los scripts que leen archivos con nombres variables, como los scripts de servicio de imágenes, desinfecten sus rutas canonicalizándolos ( realpath() y amigos) y luego limitándolos a un directorio específico.

    
respondido por el Damian Yerrick 18.11.2014 - 04:10
fuente

Lea otras preguntas en las etiquetas