XSS - Omita este RegExp

2

¿Cómo se podría omitir esta expresión regular anti-xss: /<(?:\w+)\W+?[\w]/

Estoy trabajando en ello pero no puedo encontrar una manera.

Para asegurarnos de que lo he entendido correctamente, esta expresión regular busca un patrón con un '<', luego uno o más caracteres, luego uno o más caracteres sin carácter y luego un carácter.

¿verdad?

EDITAR: Aquí está el código:

<?php $xss = $_POST['xss']; if (preg_match('/<(?:\w+)\W+?[\w]/', $xss)) { echo '<p>I don\'t think so</p>'; } else { echo $xss; }

    
pregunta ibrahim87 20.10.2014 - 17:55
fuente

1 respuesta

7

Realmente depende de cómo uses esta expresión regular. Usaré código PHP como ejemplo:

Ejemplo inseguro: Reemplazar

echo "replaced: " . preg_replace('/<(?:\w+)\W+?[\w]/', '', $_GET['input']);

Esto no sería seguro. Ejemplo:

input=<<a|ascript>alert('xss');</script>

Esto se debe a que su expresión regular hace lo que cree que hace: busca < seguido de uno o más caracteres alfanuméricos, seguido de uno o más caracteres no alfanuméricos, y luego un solo carácter alfanumérico.

Entonces, en la cadena de ataque anterior, <a|a (otro ejemplo para claridad: <aaa|||z ) coincide exactamente con esto y se eliminará. Por lo tanto, la cadena restante es <script>... .

Ejemplo más seguro: filtro

Si, por otro lado, lo usas así:

$isAttack = preg_match('/<(?:\w+)\W+?[\w]/', $_GET['input']);
if (!$isAttack) { echo "filtered: " . $_GET['input']; }

Lo anterior no funcionaría.

Ejemplo más seguro: debilidades

Aún debe tener cuidado al emitir la entrada del usuario, incluso si usa la expresión regular como en el ejemplo más seguro. Esto, por ejemplo, no sería seguro:

$isAttack = preg_match('/<(?:\w+)\W+?[\w]/', $_GET['input']);
if (!$isAttack) { echo "link: <a href="' . " . $_GET['input'] . '">click me</a>'; }

Ejemplo de ataque:

input=" onmouseover="alert('xss')

Para más lugares donde este tipo de filtrado no es lo suficientemente bueno, vea la owasp XSS Prevention Cheat Sheet .

    
respondido por el tim 20.10.2014 - 19:48
fuente

Lea otras preguntas en las etiquetas