Mi pregunta es, si se permiten caracteres en el atributo alt de una etiqueta img (a excepción de las comillas dobles), ¿es posible XSS? Imagen válida o no.
Mi pregunta es, si se permiten caracteres en el atributo alt de una etiqueta img (a excepción de las comillas dobles), ¿es posible XSS? Imagen válida o no.
Suponiendo que está rodeado de comillas dobles, esto estaría bien. Sin embargo, es posible que también desee escapar < & gt ;, a pesar de que los navegadores convencionales no tendrán ningún problema, solo en caso de que alguien tenga un agente de usuario dañado. Es válido dentro de un atributo, no es obligatorio en un atributo de doble comilla: enlace
No ha mencionado cómo se cita el atributo, por lo que he cubierto todas las posibilidades de cotización de atributos. Esta respuesta refleja la condición previa de que las comillas dobles ya están eliminadas como mencionó en su pregunta.
Sí, si el atributo en sí está citado o sin comillas:
<img src='http://www.example.com/foo.jpg' alt='user-controlled' />
y
<img src=http://www.example.com/foo.jpg alt=user-controlled />
ambos son vulnerables. El primero es vulnerable a la siguiente secuencia
' onload='alert('xss')
por lo que la etiqueta se convierte en
<img src='http://www.example.com/foo.jpg' alt='' onload='alert('xss')' />
y el segundo es vulnerable a esta secuencia
bar onload=alert('xss')
que se representará como
<img src=http://www.example.com/foo.jpg alt=bar onload=alert('xss') />
En cuanto al atributo que se cita doble, así como la restricción o la codificación de los caracteres de comillas dobles ( "
- > "
), deberá eliminar o codificar el carácter ampersand ( &
- > %código%). De la especificación HTML :
Los valores de atributo son una mezcla de referencias de texto y carácter, excepto con la restricción adicional de que el texto no puede contener un signo ambiguo
Un signo ambiguo es un carácter U + 0026 AMPERSAND (&) seguido de uno o más caracteres ASCII alfanuméricos, seguido de ";" (U + 003B), donde estos caracteres no coinciden con ninguno de los nombres dados en la sección de referencias de caracteres nombrados.
Como no puede garantizar que los datos controlados por el usuario no contengan un "signo" ambiguo, debe eliminar o codificar correctamente estos caracteres.
Ahora, si un ataque XSS es posible con acceso solo al carácter &
para escapar del valor del atributo, la respuesta probablemente no lo sea.
Si el valor &
se ingresa como su información de usuario, y la etiqueta se convierte en
<img alt="&" src="http://www.example.com/foo.jpg"/>
yel&
probablementeseinterpretarácomo&"
en la mayoría de los navegadores, por lo que es poco probable que se use esto como un vector de ataque.
Sin embargo, es mejor hacer las cosas correctamente cuando se trata de seguridad, nunca se sabe si este paso en falso que se escapa se puede convertir en algo malo por algo como mXSS .
Lea otras preguntas en las etiquetas xss