Carga de imágenes PHP - Seguridad de almacenamiento fuera de la raíz y acceso mediante el archivo de lectura ()

1

Recientemente comencé a almacenar cargas de imágenes fuera de webroot y recuperarlas a través de readfile (). Implementé esto y está funcionando bien, pero tenía curiosidad por si existían otras vulnerabilidades en este método.

Si tomo el contenido de un script malicioso desde fuera de la raíz web a través de readfile () y lo imprimo en un script php que tiene un tipo de contenido de imagen, esto forzará al navegador a interpretar siempre estos datos como una imagen o ¿Hay alguna manera en que un usuario pueda evitar esto y usarlo para ejecutar un script malicioso?

    
pregunta DanL 03.03.2016 - 23:44
fuente

2 respuestas

3

Al leer el archivo desde fuera de webroot con readfile (), no podrá ejecutar un script malicioso en el servidor .

Proporcionar el tipo de contenido adecuado significa que no se manejará incorrectamente como algo más en la mayoría de los casos.

Sin embargo, todavía hay algunos casos como Gifar donde se proporciona un contenido políglota de una manera que puede afectar el usuario (en realidad son problemas en Java o Flash, pero rompiendo el mismo origen), por lo que debe verificar que el contenido realmente es lo que debe ser, y no es uno de ciertos formatos indeseables (por ejemplo, los formatos basados en zip son bastante problemáticos).

    
respondido por el Ángel 04.03.2016 - 01:42
fuente
1

Almacenar fuera de la raíz del documento y usar readfile() es una excelente manera de proteger el servidor.

Además, para proteger al cliente, no sirva los archivos HTML literalmente (siempre envíe un Content-Type: text/plain ), o de lo contrario abrirá la puerta a los ataques de phishing. (No estoy seguro de si el vernáculo de seguridad tiene un término preciso para esto; es lo suficientemente cercano a un ataque de un pozo de agua, pero implica correos electrónicos de phishing a una URL en su servidor que dirige al usuario al servidor del atacante cuando proporciona sus credenciales. )

    
respondido por el Scott Arciszewski 04.03.2016 - 07:44
fuente

Lea otras preguntas en las etiquetas