Ho un pezzo di codice che consente
[url]someurl[/url]
Codice BB e lo sostituisce con
<a href="someurl">someurl</a>
Ci vogliono due precauzioni per prevenire XSS.
- Sostituisce
<,>e"utilizzando unstr_replacesemplice. - Utilizza un'espressione regolare per rilevare
javascript:edata:gestori di protocollo.
Poiché i browser decodificano il valore dell'attributo prima di interpretarlo ulteriormente, puoi aggirare il controllo regex codificando l'URL utilizzando [url]j ... [/url] .
Quindi ricevo:
<a href="javascript:alert(1)">javascript:alert(1)</a>
Per farla breve: voglio più di un attributo steenkin (chi farebbe clic su un collegamento simile?!)
Posso in qualche modo codificare il mio " , < , ecc. quindi non verrà sostituito da str_replace ma sarà comunque interpretato nel contesto di HTML?