PortSwigger mantiene el catálogo de payloads XSS que esquivan los filtros
El cheat sheet de PortSwigger reúne decenas de vectores de cross-site scripting que evitan paréntesis, comillas y espacios para colarse en aplicaciones con filtros.

La página de PortSwigger dedicada al cross-site scripting funciona como catálogo de payloads. No hay detrás ningún aviso ni vulnerabilidad nueva: es una lista de vectores clasificados por lo que esquivan, y lo que esquivan casi todos es el paréntesis.
La premisa es la de siempre. La aplicación filtra alert( o el par () y el atacante cambia de forma. La lista recoge esas alternativas: ejecución sin paréntesis mediante manejo de excepciones (), variantes sin punto y coma, sin comillas y sin espacios, y combinaciones que usan throw para disparar el manejador onerror con un valor que el navegador termina evaluando.
Plantillas, instanceof y JSFuck
Hay más familias. Las template strings permiten alert1`` sin abrir paréntesis, y encadenando new Function o Function al hash de la URL se construye la llamada en tiempo de ejecución. En ES6 aparece 'alert(1)' instanceof {[Symbol.hasInstance]: eval}: el operador pregunta a eval si el objeto es instancia y el intérprete hace el resto. También hay redirecciones a javascript: desde location, vectores que dejan el payload en window.name y lo cargan después con un SVG, y una exfiltración de cookies sin paréntesis, comillas ni comillas invertidas apoyada en el onerror de un <source> dentro de un vídeo.
Para los filtros más agresivos están los casos extremos: etiquetas en mayúsculas con el src apuntando a un dominio externo, apertura de <svg onload=...> sin cerrar el ángulo, y JSFuck, que codifica una llamada entera con seis caracteres ([]()!+) y deja el script sin una sola letra ni un dígito. Si el WAF bloquea por longitud o por patrón textual, ahí no encuentra nada.
Cada entrada enlaza a una página de laboratorio donde se prueba el vector concreto, así que sirve tanto para preparar un pentest como para comprobar si el filtro propio aguanta.
Conviene recordar qué es y qué no es esto. Una lista de payloads que funcionan no dice nada sobre una aplicación concreta: dice qué se ha intentado antes contra otras. La defensa real sigue pasando por escapar la salida según el contexto y por una política de seguridad de contenido bien puesta; los filtros de expresiones regulares son, en el mejor de los casos, una barrera que retrasa. Quien despliegue una app con un WAF que solo busca alert( puede repasar aquí cuántos caminos quedan abiertos.


