Las cookies son fragmentos de datos
utilizados como métodos de medición de páginas web.
Éstas son generas por el servidor web
y enviadas a los navegadores para ser instaladas.
Una vez instaladas se encargan de recoger datos
sobre el comportamiento y preferencias del usuario
y reenvía éstos datos al servidor.
Con ésto es posible personalizar el contenido
que se muestra al usuario en el navegador de acuerdo a sus gustos
y su comportamiento en la red [2].
Las cookies son comúnmente utilizadas en numerosas aplicaciones web,
debido a que resultan bastante útiles
para guardar información, configuraciones del usuario
y variables para después desplegarlas en distintas páginas
sin necesidad de una petición GET o POST.
Sin embargo, las cookies son también un objetivo de ataque
de los criminales informáticos,
ya que a menudo guardan información
de la sesión de un usuario.
Esta información en manos de un usuario mal intencionado
representa una amenaza a la seguridad de la aplicación,
y a la integridad de los datos del usuario,
debido a que es posible falsificar una sesión
y efectuar un robo de identidad.
Para incrementar la seguridad de la aplicación
y de las cookies se recurre al método HttpOnly
de ASP.NET el cual tiene por objetivo
definir si la cookie es accesible o no
por un script del usuario [3].
Para ésto se deben seguir los siguientes pasos:
-
El mecanismo de protección HttpOnly
es usado en situaciones donde no se requiere que las cookies de sesión
estén disponibles en el DOM de la aplicación.
El siguiente ejemplo muestra cómo implementar HttpOnly
Lo primero es modificar el método Page_Load
de nuestro sitio para crear una cookie,
en la cual guardamos el valor de la fecha actual.
mypage.cs
public virtual void Page_Load(object sender, EventArgs e)
{
// Create a new HttpCookie.
HttpCookie myHttpCookie = new HttpCookie("LastVisit", DateTime.Now.ToString());
// By default, the HttpOnly property is set to false
// unless specified otherwise in configuration.
myHttpCookie.Name = "MyHttpCookie";
Response.AppendCookie(myHttpCookie);
-
Luego creamos una nueva cookie, con el mismo valor
pero un nombre diferente,
a la cual modificamos el atributo HttpOnly [3].
// Create an HttpOnly cookie.
HttpCookie myHttpOnlyCookie = new HttpCookie("LastVisit", DateTime.Now.ToString());
// Setting the HttpOnly value to true, makes
// this cookie accessible only to ASP.NET.
myHttpOnlyCookie.HttpOnly = true;
myHttpOnlyCookie.Name = "MyHttpOnlyCookie";
Response.AppendCookie(myHttpOnlyCookie);
}
-
Del lado del HTML, creamos la siguiente función,
la cual obtiene las cookies desde JavaScript
mediante el objeto document.cookie.
<script type="text/javascript">
function getCookie(NameOfCookie)
{
if (document.cookie.length > 0)
{
begin = document.cookie.indexOf(NameOfCookie+"=");
if (begin != -1)
{
begin += NameOfCookie.length+1;
end = document.cookie.indexOf(";", begin);
if (end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(begin, end));
}
}
return null;
}
-
Luego con alert() mostramos el valor de ambas cookies.
Podremos observar que en el segundo mensaje
aparecerá null en lugar del valor de la cookie.
// This code returns the cookie name.
alert("Getting HTTP Cookie: "+getCookie("MyHttpCookie"));
// Because the cookie is set to HttpOnly, returns null.
alert("Getting HTTP Only Cookie: "+getCookie("MyHttpOnlyCookie"));
</script>