Tengo un código que permite
[url]someurl[/url]
BB-Code y lo reemplaza con
<a href="someurl">someurl</a>
Se requieren dos precauciones para prevenir XSS.
- Reemplaza
<
,>
y"
usando un simplestr_replace
. - Utiliza una expresión regular para detectar los manejadores de protocolo
javascript:
ydata:
.
Dado que los navegadores descodifican el valor del atributo antes de seguir interpretándolo, puedes sortear la comprobación de expresiones regulares mediante la codificación de la URL usando [url]j ... [/url]
.
Así obtengo:
<a href="javascript:alert(1)">javascript:alert(1)</a>
En pocas palabras, quiero más que un atributo de steenkin (¿¡quién haría clic en un enlace con ese aspecto ?!)
¿Puedo codificar de alguna manera mi "
, <
, etc. para que no sea reemplazado por el str_replace
pero todavía se interprete en el contexto de HTML?