¿es seguro permitir que se adjunten imágenes externas a Blog o cualquier contenido web?

6

Estoy filtrando todas las imágenes que se adjuntan a cualquier contenido de mi blog:

  1. Compruebe la extensión del archivo.
  2. Comprueba el tipo de contenido usando $finfo = finfo_open(FILEINFO_MIME_TYPE);
  3. También guardo la imagen temporalmente en mi servidor y verifico el tamaño usando getimagesize() y luego la elimino si la función no devuelve falso.

Pero después de estas comprobaciones, no volveré a revisar la imagen.

Lo que me pasó

En un perfil de usuario puedo ver mi dirección IP en la imagen cada vez que visito el perfil de usuario. Este es un ejemplo que adjunté a esta publicación:

Ahora, puedo concluir que permitir al usuario adjuntar cualquier imagen será peligroso debido a este ataque de archivo de ocultación que puede generar una imagen dinámica en cada solicitud.

¿Hay algún mecanismo para evitar esto?

o debería eliminar todas las imágenes adjuntas del perfil de usuario y guardar cada imagen en mi servidor

    
pregunta Akam 04.03.2013 - 21:56
fuente

3 respuestas

7

Si solo se trata de una simple imagen de perfil, puede evitar la mayoría de las amenazas de seguridad utilizando una tercera parte confiable como Gravatar (que es lo que Usos de seguridad.se). Utilizar una imagen vinculada como " Web Bug " es inevitable con imágenes remotas, pero al parecer a mucha gente no le importa eso. Gravatar puede rastrearlos. El almacenamiento local de un archivo controlado por un atacante crea otras amenazas de seguridad.

Más generalmente, no desea almacenar archivos controlados por el usuario en su servidor. Un buen ejemplo de explotar este tipo de vulnerabilidad es usar una vulnerabilidad de inclusión del archivo local (LFI) de PHP para obtener la ejecución remota de código . Incluso almacenar temporalmente un archivo controlado por un atacante es una amenaza de seguridad que puede explotarse con un ataque LFI.

La verificación de que el enlace es, de hecho, una imagen que utiliza getimagesize () ayuda a prevenir CSRF. Sin embargo, incluso un archivo de imagen válido puede contener etiquetas PHP en los metadatos EXIF, y eso podría usarse en un ataque LFI. Los ataques LFI de este tipo pueden evitarse utilizando la opción de configuración open_base_dir de PHP para evitar que PHP incluya archivos en la imagen o directorios temporales.

    
respondido por el rook 04.03.2013 - 22:14
fuente
2

Cuando se "adjunta" una imagen externa al comentario, entonces ocurre una de estas dos cosas, dependiendo de la forma en que su servidor maneje tales cosas:

  • Se conserva una referencia a la URL que apunta a la imagen y se reproduce en el archivo HTML que se devuelve a cualquier navegador cliente que visite su sitio.
  • La imagen es descargada por su servidor, y los clientes recibirán la copia que usted guarda en su servidor.

En el primer caso, cada cliente que visite su página descargará automáticamente la imagen, y el servidor en el otro extremo (no el suyo, el que contiene la imagen) puede servir cualquier imagen que crea conveniente, dependiendo de quién está preguntando (así es como funcionan las imágenes de "mostrar mi IP"). Incluso si usted mismo navega por la página con su navegador, no puede estar seguro de que todos los demás visitantes vean lo mismo. Además, el administrador del sistema que contiene la imagen podrá recopilar la dirección IP para cada visitante de su sitio.

Por último, pero no menos importante, un enlace de "imagen" creado con fines malintencionados puede apuntar a cosas distintas a las imágenes, e inscribir a todos los visitantes de su sitio de forma involuntaria en un denegación de servicio distribuida .

Por lo tanto, parece más seguro obtener una copia de la imagen en el servidor y entregarla solo a los visitantes desde su servidor. Esto debería ir acompañado de un paso de validación / conversión que verifique que la imagen pueda decodificarse, y lo obligue a tener un tamaño "sano". ¡Cuidado con los formatos de imagen de secuencias de comandos como SVG !

    
respondido por el Tom Leek 04.03.2013 - 22:29
fuente
1

No solo pueden decirle a tu IP, sino que también pueden adivinar qué tipo de navegador estás ejecutando y qué sitio web te envió allí (encabezado de referencia).

Sí, la única forma de controlar la privacidad de la imagen es mantener esas imágenes alojadas en un servidor cuya Política de privacidad usted controla y, en su caso, incluiría copiar las imágenes a su servidor.

    
respondido por el random65537 04.03.2013 - 22:03
fuente

Lea otras preguntas en las etiquetas