Cargando imágenes seguras de XSS, código php y virus

3

Sé que mi pregunta ha sido respondida muchas veces, pero la mayoría de las respuestas aborda funciones que ni siquiera uso (como el uso incluye imágenes) y eso me preocupa porque tal vez no esté haciendo algo que no hago. debería estar haciendo.

Cuando estoy validando las imágenes, primero verifico el tamaño (2MB o menos) y luego verifico la extensión del archivo usando:

$Extension=explode('.',$Userfile);

if(!in_array(end($Extension),$Whitelist))

Donde $Whitelist son las extensiones que permito (solo jpg, jpeg y png). Después, uso getImageSize para verificar que realmente es una imagen y si se cumplen las 3 condiciones, creo un nuevo nombre para la imagen, agrego ".jpg" y luego lo guardo en una carpeta de imágenes (no lo hago). No sé si esto es importante, pero también creo una versión más pequeña de la imagen para mostrar en la página y si desea verla en tamaño completo, debe hacer clic en ella y ver la imagen original en una nueva pestaña).

Lo único que hago con estas imágenes es mostrarlas con img src="" en mi sitio web, nunca incluyo imágenes (en realidad ni siquiera sé por qué algunas personas hacen esto [sin criticar, estoy hablando en serio ]) o use las funciones fopen y similares y la carpeta de imágenes no puede ejecutar el código php.

¿Es eso suficiente para no ejecutar el código php incluido en las imágenes?

¿Es eso suficiente para no ejecutar algún código html / javascript en las imágenes? Porque no quiero un ataque XSS solo porque fui ingenuo con las imágenes y solo consideré a apache ejecutando el código php .

¿Debo hacer algo con las posibles imágenes con virus? Creo que la restricción de tamaño, agregar un nuevo nombre y siempre asegúrese de agregar .jpg al final del nuevo nombre, ayúdame a mitigar esto. , pero no estoy muy seguro.

Soy nuevo con contenido cargado y es por eso que me siento realmente paranoico por esto (y todo tipo de comentarios de usuarios ... es como estar dentro de una pirámide donde todo está maldito), así que apreciaré todas las respuestas .

    
pregunta Esteban 17.08.2013 - 13:18
fuente

1 respuesta

3

En primer lugar, debes revisar tus subidas (de imagen) porque pueden facilitar la explotación de otros errores (como el archivo local). Dado que existen virtualmente infinitos vectores de ataque, probablemente perderás algo, pero deberías hacer lo mejor posible.

  • Su solución para el filtrado de extensiones depende del tiempo de ejecución: Apache, por ejemplo, ejecutará evil.php.jpeg como un script PHP si la extensión .jpeg no está registrada en su configuración (aunque este es un caso excepcional). Sugiero filtrar extensiones dobles y nombres de archivos que terminan en '.'. Lectura recomendada:

enlace

  • getImageSize () le dice si el archivo cargado es realmente una imagen, aunque puede colocar contenido arbitrario (como carga útil de ataque, PHP o código HTML / JS) en algunos de los encabezados legítimos (piense en PNg comentarios o EXIF ). Posiblemente también se puede crear un archivo que sea una imagen y sea válido en algún otro formato a la vez. Sugiero cambiar el tamaño / transformar la imagen cargada si es posible.

  • Como señaló FakeRainBrigand, debe configurar los permisos de archivo como no ejecutables para reducir el riesgo de ejecución a nivel del sistema operativo (también algunas configuraciones de PHP requieren que los scripts sean ejecutables).

  • ¡La limitación de tamaño y el cambio de nombre son buenas prácticas!

  • Realmente no sé qué quiere decir con "imagen con virus". Uno puede explotar errores en los motores de procesamiento de imágenes para ejecutar código, y no hay mucho que pueda hacer al respecto, ya que la detección de este tipo de código malicioso requeriría un sistema antivirus completamente diferente que eventualmente enfrentaría a Detener el problema .

respondido por el buherator 17.08.2013 - 14:05
fuente

Lea otras preguntas en las etiquetas