Cuando los filtros no hacen lo que deberían
Por: alex | 24 Noviembre 2006 | Ver comentarios |
El código que se muestra a continuación, es un ejemplo simplificado del comportamiento que ofrece en una de sus secciones, un -importante- diario español.
<?php
/* Para evitar problemas con los encodings */
header('Content-type: text/html; charset=utf-8;');
/* Mandar un error 404 si el parámetro return contiene la cadena <script, < script, etc. -> \s=espacio */
if ( preg_match('/<\s*script/', $_GET['return']) ) {
header("HTTP/1.0 404 Not Found");
echo 'Not found!';
exit();
}
?>
<html>
<head>
<title>Anti XSS Page :D</title>
</head>
<body>
<?php echo $_GET['return']; ?>
</body>
</html>¿Qué tienen que hacer para ejecutar javascript en el código mostrado?
Off Topic: ¿Qué sugieren para de algún modo premiar a los que aporten en la resolución de estos quiz? -dinero no tengo :D.


mcosta
25 de Noviembre de 2006, 07:26:53 am
¿Tal vez un javascript:tal() funcione?
En el feed se ve preg_match(’/
mcosta
25 de Noviembre de 2006, 07:29:00 am
Oops, en tu blog si funciona el filtro anti XSS. Aqui va lo mismo pero html-ok:
En el feed se ve preg_match(’/<\s+script/’, $_GET[’return’]). Ese + canta de lejos. Que sorpresa me he llevado al ver en la pagina un *.
PD: Para la proxima usare la vista previa.
alex
25 de Noviembre de 2006, 08:30:20 am
Je je, lo del + lo acabo de corregir.
Por cierto, si quieres que enviar código usa los bloques [ code] [ /code] o [ php] [ /php] (sin los espacios).
Francesc Rosàs
25 de Noviembre de 2006, 06:03:36 pm
URL:
http://example.com/foo.html:
[html]<script type="text/javascript">
alert(window.parent.document.title + ‘ is powned’);
</script>[/code]
Imagino que habrá alguna solución más elegante pero es la primera que se me ha ocurrido que funcione.
Francesc Rosàs
25 de Noviembre de 2006, 06:05:49 pm
Qué tal un iframe a una página con javascript? Es cutre pero funciona (habia enviado un comentario con el código de ejemplo pero tu wordpress se lo ha “comido”)
alex
25 de Noviembre de 2006, 06:27:27 pm
Francesc, muy bien, esa es una de las tantas formas de saltar ese filtro.
Para enviar código, como dije en #3, puedes usar los bloques [ code][ /code], php, javascript, etc
Victor
25 de Noviembre de 2006, 11:37:23 pm
y ¿Cual sería la solución? ¿Validar los tags iframe igual que script?
Francesc Rosàs
26 de Noviembre de 2006, 07:17:36 am
#7, normalmente se valida sólo los tags i atributos que quieres (como hace el autor de este blog con los comentarios).
alex
26 de Noviembre de 2006, 11:07:34 am
Francesc, sobre el uso del iframe, lo que se puede hacer con esto es un poco más limitado que otros métodos, por ejm. no se puede acceder al documento que contiene al iframe si es que estos no pertenecen al mismo dominio.
Francesc Rosàs
27 de Noviembre de 2006, 03:31:44 pm
Bien visto Alex, a ver qué tal este otro:
<SCRIPT>alert('ue')</SCRIPT>alex
27 de Noviembre de 2006, 04:03:45 pm
Jeje, se me olvidó poner el modificador
ia la expresión regular.ale
3 de Diciembre de 2007, 04:59:11 pm
y .. pasar por urlencode, hexadecimal y blablabla…
cualquier cosa equivalente , pero que no siga la sintaxis de anteponer la etiqueta script se la tragaría