¿Es imposible reflejar XSS, cuando los meta-caracteres HTML, por ejemplo, y, se codifican, y el resultado se genera en el contexto HTML?

3
  

Es XSS reflejado imposible, cuando los meta-caracteres HTML, por ejemplo, < y & gt ;, están codificados y el resultado resultante en un contexto HTML?

Tengo un sitio web que muestra la ruta de la URL directamente en el contexto HTML, es decir,

www.mysite.com/helloworld da como resultado que helloworld se muestre entre las etiquetas <body> .

Sin embargo, algunos meta-caracteres, por ejemplo, < y > , son HTML escapado.

En este caso, ¿es posible realizar un ataque XSS reflejado, como un ataque de codificación UTF esotérico, etc.?

    
pregunta Shuzheng 23.07.2018 - 20:21
fuente

2 respuestas

6

Esto depende del contexto. Supongo que está utilizando la función htmlentities() , lo que en general sería seguro. Hace más o menos exactamente lo mismo que htmlspecialchars() .

Ambos protegen contra el XSS general y previenen el XSS basado en eventos cuando el parámetro saneado se inyecta en una etiqueta HTML.

Ambos no evitan los ataques javascript: , lo que puede ocurrir si se inyecta el valor del parámetro en un enlace, iframe u otra etiqueta similar. Si inyecta un src o href de cualquiera de las etiquetas, recomendaría primero eliminar cualquier espacio en blanco del parámetro y luego verificar ambos javascript: y data: .

javascript:alert(0) le dará una alerta cuando se inyecte en un enlace o iframe. data:text/javascript:alert(0) hará lo mismo. data:text/html:<script>alert(0);</script> hace lo mismo también, y omite strip_tags .

El motivo de la primera eliminación de espacios en blanco es evitar que un atacante suelte un carácter de salto de línea / CRLF en medio de su carga útil, por lo que PHP lo lee como que no es javascript: o data: al bloquear la carga útil, pero todavía se ejecutará como javascript lo ignorará.

Espero que explique qué tipo de ataques son posibles, es muy fácil afirmar que htmlentities() y htmlspecialchars() son una solución única para el problema, pero dependiendo de la situación, eso puede ser extremadamente peligroso. consejos.

    
respondido por el Cillian Collins 23.07.2018 - 21:28
fuente
0

Si las comillas no se escapan y el texto se coloca dentro de un atributo html citado, entonces puede funcionar un valor que establezca un atributo con javascript como " onmouseover="alert(0) .

    
respondido por el Macil 23.07.2018 - 23:16
fuente

Lea otras preguntas en las etiquetas