Cuando se quieren evitar ataques XSS, normalmente en PHP se usan las funciones htmlspecialchars o htmlentities.
Ahora veo un ejemplo en el que un ataque puede evitar estas funciones cuando se crea la página con HTML no estándar. Tenemos el tÃpico ejemplo de un texto que se introduce por un formulario y se presenta como un enlace.
$dato = htmlentities($_GET['dato'], ENT_QUOTES);
echo "<a href=pagina.php?dato=$dato>Enlace</a>";
Si os fijáis bien veréis que el enlace está mal formado y no tiene las comillas en el href. Si metieramos como dato de entrada lo siguiente: ” onclick=alert(null)” (sin las comillas), nuestra página sufrirÃa un ataque XSS y mostrarÃa un mensaje alert.
Non-Standard HTML Fuels XSS Attacks