En una entrada anterior había prometido comentar un pequeño bug presente en asp.net 2 -y probablemente versiones anteriores.
Category: Seguridad
Artículos y opiniones sobre seguridad Web, SQL Injection, XSS, etc.
El título, es el nombre del tema que expuso Jose Nazario en UMEET 2006, trata sobre el uso de Google Code Search para encontrar las vulnerabilidades -típicas- en el código de aplicaciones que hayan sido indexadas por este buscador.
Pueden ver su presentación o las diapositivas en:
Al empezar a escribir, iba a comentar un "bug" presente en ASP.NET 2.0, pero para no hacer tan larga -y aburrida- esta entrada, lo haré en dos partes
ASP.NET, provee por defecto una limitada protección contra ataques XSS a través del atributo ValidateRequest, que se puede definir tanto a nivel de página como a nivel de la aplicación.
Continuando con la serie, ¿qué cosas se tienen que cumplir para que el siguiente código sea vulnerable a XSS?
/* Evitar XSS a través de otros formatos */
header('Content-type: text/html; charset=utf-8;');
$color = '000';
if ( !empty($_GET['color']) ) {
$color = htmlentities(strip_tags($_GET['color']));
}
?>
<html>
<head>
<title>Anti XSS Page :D</title>
<style type="text/css">
#demo {
width: 100%;
height: 50px;
background: #<?php echo $color; ?>;
}
</style>
</head>
<body>
<div id="demo">
</div>
</body>
</html>
La siguiente función era utilizada para validar los datos en una aplicación web -es una versión modificada del método que trae ezSQL
return mysql_real_escape_string(stripslashes(strip_tags($text)), $this->connection);
}
Se usaba de la siguiente manera:
<html>
<head>
<title>Demo</title>
</head>
<body>
<?php $links = $db->get_results('SELECT url, title FROM links'); ?>
<ul>
<?php foreach ($links as $link) : ?>
<li><a href="<?php echo $db->escape($link->url); ?>">
<?php echo $db->escape($link->title); ?></a></li>
<?php endforeach; ?>
</ul>
</body>
</html>
¿Pueden identificar donde está el error?
Nota: la respuesta al quiz sobre validación de datos, todavía queda pendiente a pedido de Victor.