¿Qué pasos deben tomarse para validar las imágenes subidas por el usuario dentro de una aplicación?

22

Recientemente, he trabajado en una serie de aplicaciones que necesitan procesar las imágenes cargadas por el usuario. Se han tomado medidas para validar la extensión y el tipo mime.

Pero, ¿qué más se puede hacer para garantizar que la imagen sea válida?

En mi caso, la carga la maneja PHP y luego se pasa a GD o ImageMagick , ambos de los cuales sufren vulnerabilidades que pueden provocar la denegación de servicio y posiblemente la ejecución de código arbitrario.

Me interesaría cualquier sugerencia que las personas puedan ofrecer para mejorar el proceso de validación, específicamente a PHP y también a cualquier aplicación web o no web en general.

De mi pregunta de ejemplo sobre la Propuesta del Área 51

    
pregunta Mark Davidson 12.11.2010 - 15:29
fuente

3 respuestas

12

Aunque suene simple de hacer, la verificación de la imagen puede ser complicada. Deben realizarse al menos las siguientes acciones:

  • verifique el tamaño de la imagen: ancho, alto y tamaño de sí misma;
  • verifique la extensión y el nombre de la imagen;
  • verifique el tipo de contenido;
  • limitar la cantidad de imágenes cargadas;
  • limitar el acceso a las imágenes cargadas, mejor si el usuario no sabe dónde está almacenado;
  • limitar los tipos de extensiones de imagen;
  • preferiblemente cambiar el nombre de la imagen;

Además, recomendaría cambiar el tipo de imagen explícitamente después de esas comprobaciones, por ejemplo, de PNG a JPG. Simple, pero funciona bien.

    
respondido por el anonymous 12.11.2010 - 15:39
fuente
8

No estoy de acuerdo con las respuestas presentadas hasta ahora.

Definitivamente, necesitaría volver a escribir la imagen (quizás forzando al usuario a cambiar su tamaño) utilizando una biblioteca de manipulación de imágenes, como las que sugirió.

Se necesita cuidado adicional para eliminar los datos EXIF, etc., debido a vulnerabilidades como GIFAR, XSS e inclusión de archivos, que pueden habilitar el encadenamiento de ataques.

    
respondido por el atdre 11.04.2011 - 01:59
fuente
1

Podría ponerle un límite de tamaño para que no supere los 2 MB o algo así. Ayudaría con el espacio de almacenamiento y evitaría que los usuarios subieran imágenes de alta resolución.

    
respondido por el Jeremy 12.11.2010 - 15:33
fuente

Lea otras preguntas en las etiquetas