Sí, su servidor podría ejecutar código PHP dentro de un archivo de imagen si no está configurado correctamente :
enlace
Un ejemplo de eso es image.gif.php
. Un archivo puede ser tanto una imagen válida como y un script PHP válido, no es suficiente simplemente para verificar el tamaño de la imagen u otras propiedades. Tampoco es suficiente para metadatos de tira , un GIF sin comprimir puede contener PHP como datos de imagen (aunque puede ser unpretty), PNG admite fragmentos de datos arbitrarios .
El defecto es aceptar cargas con una comprobación de sanidad insuficiente, específicamente intentando evitar nombres de archivos no deseados (por ejemplo, .php
) mediante el uso de una expresión regular no anclada como \.(png|gif|jpg|jpeg)
(no $
anchor), y permitiendo que esas imágenes sean servidas desde un directorio con el procesamiento de PHP habilitado. La mejor práctica es que probablemente nunca debe usar un nombre de archivo provisto por el usuario tal como está.
Estos son validación de datos bastante clásicos y errores de validación de entrada .
Si sigue las instrucciones de instalación de PHP (para Apache 2) , Ten algo como esto en tu configuración de Apache:
<FilesMatch "\.ph(p[2-6]?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
Tenga en cuenta el ancla $
, esto evitará que PHP se interprete a file.php.gif
.
(Lo que falta en esas instrucciones es asegurarse de que PHP esté limitado por un contexto <Directory>
que contenga solo código de confianza, y no pueda ser escrito por el usuario del servidor web ).
Si no sigue esas instrucciones y usa mod_mime
's AddType
(o AddHandler
) en su lugar:
AddType application/x-httpd-php .php # STOP!
Esto puede causar el mismo problema porque mod_mime
puede hacer algo que no espera con multiples extensiones. Consulte enlace (gracias a Hendrik Brummermann por señalar) esto afuera). Este riesgo se puede mitigar con el contexto <Directory>
configurado correctamente para permitir solo el código de confianza.
Este documento (PDF) es un poco antiguo, pero cubre bien las mitigaciones:
enlace
Otra posible fuente de problemas son las declaraciones inseguras include
/ require
(también cubiertas en ese PDF) que permiten que un atacante include
cargue contenido al modificar cadenas de consulta o encabezados de solicitud HTTP.
Consulte también la reciente pregunta relacionada: Riesgos de una carga de imagen PHP forma
(aunque no creo que sea correcto confiar en getimagesize
para verificar las imágenes), y
¿Usa PHP para revisar el archivo de imagen cargado en busca de malware? (que contiene un conjunto útil de enlaces).