En HTML, hay varios caracteres especiales < > & ' "
que tienen importancia para el analizador DOM. Estos son los personajes con los que las funciones populares como PHP htmlspecialchars se convierten en entidades HTML para que no se activen accidentalmente cuando se analizan.¿Hay otras secuencias que los navegadores interpretan como caracteres especiales HTML?
Las traducciones realizadas son:
- '&' (ampersand) se convierte en
&
"
(comillas dobles) se convierte en"
cuando ENT_NOQUOTES no está establecido.'
(comilla simple) se convierte en'
solo cuando se establece ENT_QUOTES.- '<' (menos) se convierte en
<
- '>' (mayor que) se convierte en
>
Sin embargo, recuerdo que en los navegadores antiguos como IE6, también hubo otras secuencias de bytes que causó el analizador DOM del navegador a interpret content as HTML.
¿Sigue siendo un problema hoy? Si filtra estos 5 solo ¿es eso suficiente para evitar XSS?
Por ejemplo, aquí están todos los conocidos combinaciones del carácter "<" en HTML y JavaScript (en UTF-8).
<
%3C
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
\x3c
\x3C
\u003c
\u003C
omfg @ 'attribute =" & {alert ('XSS')} '' solía funcionar. – goat
Netscape fue el último navegador que encontré con documentación de que esto funcionó realmente, aunque creo que funcionó en IE 5 y algunos otros también, simplemente no estaba tan bien documentado. Pero sí, los navegadores modernos dejaron de poder hacer eso, probablemente por algunas razones (seguridad, separación de contenido y acción, etc.). – Ktash
Bueno, en mi caso necesito admitir tantos caracteres como sea posible (especialmente unicode), así que estoy tratando de averiguar qué bloquear, ya que no puedo entender casi todo el espacio Unicode. Afortunadamente, que yo sepa, solo el pequeño espacio ASCII contiene las cosas peligrosas, solo me pregunto si las profundidades del Unicode contienen algunas cosas que podrían * ayudar * a activar otros bytes. ('preg_match_all ('/ \ p {L} +/u', $ str, $ arr)'). También debo permitir la discusión de secuencias peligrosas, así que no quiero eliminar todo lo sospechoso. – Xeoncross