2012-08-10 9 views
5

Después de leer http://dsecrg.com/files/pub/pdf/XSS_in_images_evasion_bypass_(eng).pdf, está claro que permitir cargas de imágenes de los usuarios lo abre a ataques XSS.Utilice PHP para evitar ataques XSS dentro de una imagen

No pude encontrar ningún ejemplo de PHP sobre cómo visualizar una imagen cargada para ataques XSS.

Encontré uno para CodeIgniter, que estoy usando. La función es xss_clean($file, IS_IMAGE), pero solo hay 1 frase de documentación para ella, así que no tengo idea de cómo funciona y un comentario en su foro dijo que tenía una tasa irrazonablemente alta de falsos positivos, por lo que no se puede usar en producción.

¿Qué recomienda para evitar ataques XSS dentro de una imagen cargada?

Respuesta

4

Siempre que mantenga la extensión correcta (y los usuarios son diligentes con la actualización de su navegador) la inyección de imágenes no debería ser posible.

Por ejemplo, si alguien carga alert('xss'); como una imagen y tiene <img src='that-image.png'>, se emitirá como png y el JavaScript no se ejecutará (al menos de nuevo en IE7). Lo importante es que cambie el nombre de las imágenes de forma adecuada.

Si tiene php> 5.3 y la extensión PECL finfo, que se puede utilizar para obtener el tipo MIME del archivo y tienen una lista blanca de tipos va a permitir (PNG, JPG, GIF me imagino). Si está en una máquina Linux, file también puede ayudarlo.

+0

Yo personalmente solo emito todo como application/octet-stream –

+0

Thanks Explosion, así es como lo manejaré. Según lo indicado en el artículo al que he vinculado anteriormente: "Por supuesto, se puede ignorar este problema diciendo que proviene del defecto de la aplicación. Sin embargo, un ciberdelincuente puede instalarlo y usarlo mediante una imagen en el la presencia de PHP local incluye vulnerabilidad y en ese caso, las características de un navegador ya no serán relevantes. Este hecho confirma que, si se trata de datos de usuarios, el filtrado es necesario en cualquier caso ". Eso me asustó pero mi servidor está actualizado y después de pensarlo ... Realmente no me importa si los usuarios de IE 7 son propiedad de un hacker. – Justin

0

En CodeIgniter hay muchas manera de evitar que el XSS. Puede habilitarlo al obtener el valor como -> post ('datos', verdadero). El segundo parámetro es XSS bool.

Además, no utilizan la etiqueta HTML IMG. Use el CodeIgniter que limpiará, mirará y facilitará la visualización de la imagen.

Sólo mis dos centavos!

+0

No estoy seguro de si eso realmente filtrará la imagen (¿tal vez solo el nombre de archivo?) A menos que use específicamente xss_clean ($ file, TRUE). Ver is_image aquí: http://codeigniter.com/user_guide/libraries/security.html – Justin

+0

Sí, el 'img()' función en el CodeIgniter [HTML ayudante] (http://ellislab.com/codeigniter/user-guide /helpers/html_helper.html#img) ** no realiza ninguna comprobación de seguridad **, simplemente construye una etiqueta ''. Mi método preferido es obtener el tipo MIME de la imagen y solo permitir que los tipos que sabe sean seguros ... –

Cuestiones relacionadas