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.
Month: noviembre 2006
Hoy este -pequeño- blog recibió una cantidad considerable de spam en tan solo unas cuantas horas, lo peor de todo esto es que todos los comentarios pasaron como "buenos" sin que Akismet pueda hacer algo al respecto*.
Esta es una pequeña muestra del "ataque" de hoy:
Debido a que últimamente ando algo ocupado, he tomado la decisión de moderar los comentarios -al menos hasta que encuentre una solución, puesto que me resulta más fácil hacer eso que estar borrando manualmente el spam.
¿Alguien conoce o ha desarrollado algún plugin para evitar los spam floods?
*: Akismet se basa en los aportes que hacen diferentes bloggers al marcar un comentario como spam, pero si tienes la mala suerte de que nadie haya hecho ese trabajo sobre un comentario X, pues estás en problemas.
Hace ya bastante tiempo publiqué un pequeño "control" para exportar un Datagrid a Excel, esa vez decidí no publicar el código fuente debido a que éste tenía demasiados errores de programación -recién empezaba con .NET :-D.
Para mi sorpresa, al parecer este control fue utilizado por un gran número de personas y desde ese entonces he recibido varias consultas sobre el funcionamiento del mismo, algunas simples y otras imposibles de hacer por la forma como se hacía la exportación.
Desde que Fresqui -un servicio parecido a Digg o Menéame- anunció que iba a pagar a los usuarios que envíen contenidos de calidad y colaboren con la comunidad de Fresqui, seguramente muchos de los usuarios de ésta se han puesto "las pilas" para participar más.
¿Qué condiciones se deben dar para que el siguiente código sea vulnerable a XSS?
<head>
<title>Test</title>
</head>
<body>
<?php echo htmlentities($_GET['mensaje'], ENT_COMPAT, 'utf-8'); ?>
</body>
</html>
Nota: la codificación del documento que contiene el código mostrado es UTF-8.
Actualización: Explotar el código mostrado
Se deben cumplir las siguientes condiciones para que la vulnerabilidad se haga evidente:
- El atacante envía como valor de la variable
mensaje
un texto en formato UTF-7 u otro. - El servidor web donde se aloja la página no envía una codificación por defecto (Ej. que no haya una directiva AddDefaultCharset en Apache)
- Que el navegador use la misma codificación que el texto enviado. En Firefox se debe cambiar manualmente, con lo cual se complica el ataque, sin embargo, si en Internet Explorer la selección automática de codificación está habilitada, entonces la página que contiene el código ya es vulnerable, caso contrario, estamos en el mismo caso que Firefox.
He puesto el código en http://test.buayacorp.com/xss.php para efectos de prueba (para ver el mensaje, usen IE con la mencionada opción habilitada - Ver->Codificación->Selección Automática
).
Solución
Poner de manera explícita la codificación adecuada, a través de cabeceras HTTP o del elemento meta
.