Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Usar cookies HTTPOnly

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en ASP.NET, utilizando HTTPOnly para proteger las cookies de la aplicación, asegurando la información almacenada dentro de ellas y reduciendo la posibilidad de un ataque malintencionado.

Necesidad

Uso de cookies HttpOnly en ASP.NET con C#.

Contexto.

  1. Se está desarrollando una aplicación web en C# con ASP.NET.

  2. Se desea proteger las cookies con HttpOnly.[1]

Solución

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:

  1. 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
    1
    2
    3
    4
    5
    6
    7
    8
    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);
    
  2. Luego creamos una nueva cookie, con el mismo valor pero un nombre diferente, a la cual modificamos el atributo HttpOnly [3].

    1
    2
    3
    4
    5
    6
    7
    8
       // 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);
    }
    
  3. Del lado del HTML, creamos la siguiente función, la cual obtiene las cookies desde JavaScript mediante el objeto document.cookie.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    <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;
    }
    
  4. 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.

    1
    2
    3
    4
    5
     // 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>
    



Haz un comentario

Estado de los servicios - Términos de Uso