1. Introducción
Cookie , o cookie HTTP, cookie web, cookie del navegador es un pequeño fragmento de datos enviado desde el sitio web y almacenado en el navegador del usuario cuando navega por este sitio web. Cada vez que un usuario carga un sitio web, el navegador enviará automáticamente cookies al servidor web para notificar al sitio web de las acciones anteriores del usuario.
Las cookies están diseñadas para ser un mecanismo confiable que ayuda a los sitios web a recordar información de estado (como artículos en el carrito de compras) o almacenar las actividades del usuario (incluidos los clics): un enlace, inicio de sesión, páginas visitadas durante la semana, mes o año,... ).
Aunque las cookies no pueden transportar virus ni instalar malware en su computadora, el uso de cookies de seguimiento y especialmente de terceros se considera una forma de identificar información personal a partir del historial de navegación de los usuarios. Las cookies pueden guardar contraseñas o contenido que los usuarios ingresan en formularios html, como números de tarjetas de crédito o direcciones personales.
Cuando un usuario visita un sitio web por primera vez, se envía una cookie desde el servidor web al navegador y se almacena en su ordenador. Luego, cuando regrese al sitio web, el sitio web lo reconocerá gracias a la información guardada en la cookie.
Las cookies de autenticación son un método común utilizado para determinar si un usuario ha iniciado sesión en un sitio web o no. Sin dicho mecanismo, será difícil para el sitio web saber cuándo enviar información personal al usuario y obligarlo a iniciar sesión varias veces. Las cookies de autenticación, aunque son muy convenientes, crean oportunidades para que los piratas informáticos lean datos confidenciales en las cookies, realizando así acciones que perjudican a los usuarios.
2. Descripción general de las cookies HTTP
2.1. Historia
El término cookie se deriva del término cookie mágica, que es un dato inmutable enviado y recibido por un programa informático. A un programador llamado Lou Montuli se le ocurrió la idea de utilizar cookies mágicas en las comunicaciones web en 1994. En ese momento, trabajaba para Netscape Communications, en un proyecto para desarrollar aplicaciones de comercio electrónico para MCI. Las cookies se han utilizado como una solución para crear carritos de compras virtuales, lo que ayuda a que los servidores de MCI no tengan que guardar el estado de las transacciones, sino que se almacenan en la computadora del usuario.
Junto con John Giannandrea, Montuli escribió la primera especificación para las cookies de Netscape. La versión 0.0beta de Mosaic Netscape, lanzada el 13 de octubre de 1994, admitía cookies. El primer uso de cookies (fuera del laboratorio) comprobó si un cliente que visitaba el sitio web de Netscape lo había visitado antes o no. A Montuli se le concedió una patente de cookies en 1995. Y la versión 2 de Internet Explorer (lanzada en octubre de 1995) incorporó el uso de cookies.
La introducción de cookies no estaba muy extendida durante esta época. En particular, las cookies se aceptan por defecto y no se notifica a los usuarios de su presencia. El público no conoció las cookies hasta después de que se publicara un artículo sobre ellas en el Financial Times el 12 de febrero de 1996. Desde entonces, las cookies han recibido mucha atención, especialmente la información privada que contienen. Las cookies fueron discutidas en dos audiencias de la Comisión Federal de Comercio de Estados Unidos en 1996 y 1997.
La primera discusión sobre una especificación formal de cookies comenzó en abril de 1995. Se formó un grupo especial dentro del Internet Engineering Task Force (IETF) con el fin de llevar a cabo este trabajo. Finalmente, el grupo publicó la especificación en febrero de 1997. La especificación definía las cookies de terceros como no aceptables para todos, o al menos no habilitadas de forma predeterminada.
En abril de 2011 se publicó en el documento RFC 6265 la especificación estándar para las cookies en su uso práctico .
2.2. Terminología
Cookies de sesión
Las cookies de sesión, también llamadas cookies en memoria o cookies transitorias, sólo existen en la memoria temporal mientras el usuario navega por el sitio web. Si no se establece una fecha de vencimiento o un intervalo de validez en el momento de la creación de la cookie, se establecerá una cookie de sesión. Normalmente los navegadores web eliminarán automáticamente las cookies de sesión cuando el usuario cierre el navegador.
Cookies persistentes
Las cookies persistentes prolongan la sesión del usuario. Si una cookie persistente tiene una duración máxima de 1 año, durante ese período, el valor inicial establecido en la cookie se enviará al servidor cada vez que el usuario visite el sitio web. Se puede utilizar para registrar información importante, como cómo el usuario visitó el sitio web por primera vez. Por este motivo, las cookies persistentes también se denominan cookies de seguimiento.
Cookies seguras
La cookie segura es un atributo de seguridad habilitado cuando se utiliza HTTPS, lo que garantiza que la cookie siempre esté cifrada cuando se transfiere del cliente al servidor, lo que ayuda a evitar escuchas y revelaciones de información. Además, todas las cookies deben cumplir con la política de mismo origen del navegador.
Cookies HttpOnly
El atributo HttpOnly de las cookies es compatible con la mayoría de los navegadores. Una cookie de sesión HttpOnly solo se utilizará en una solicitud HTTP (o HTTPS), lo que limitará el acceso de API que no sean HTTP, como Javascript. Esta restricción mitiga, pero no elimina, el robo de cookies a través de vulnerabilidades de secuencias de comandos entre sitios (XSS).
Cookies de terceros
Las cookies de origen son cookies que pertenecen al mismo dominio (o subdominios dentro del mismo dominio) que se muestran en la barra de direcciones del navegador. Las cookies de terceros son cookies pertenecientes a distintos dominios que se muestran en la barra de direcciones del navegador. Los sitios web pueden tener contenido de dominios de terceros (como anuncios publicitarios), desde los cuales se puede rastrear el historial de navegación de los usuarios. La configuración de privacidad de la mayoría de los navegadores bloquea las cookies de seguimiento de terceros.
Por ejemplo, supongamos que un usuario visita el sitio web ejemplo1.com . Este sitio web contiene publicidad de ad.foxytracking.com. Cuando se carga, las cookies de ad.foxytracking.com se guardarán. Luego visita otro sitio web (ejemplo2.com), que también contiene un anuncio de ad.foxytracking.com y también establece una cookie que pertenece a ad.foxytracking.com. Finalmente, ambas cookies se enviarán al anunciante al cargar anuncios o acceder a su sitio web. Los anunciantes pueden utilizar estas cookies para crear el historial de navegación de un usuario en todos los sitios web que contienen sus anuncios.
En 2014, había algunos sitios web que configuraban cookies que podían ser leídas por más de 100 dominios de terceros. De media, un sitio web tendrá unas 10 cookies configuradas, siendo el número máximo de cookies superior a 800.
supergalleta
Una supercookie es una cookie que se origina en un dominio de nivel superior, como .com, o un sufijo público, como .co.uk. Es importante que los navegadores bloqueen las supercookies debido a algunos problemas de seguridad. Si se desbloquea, un atacante que controle un sitio web malicioso puede configurar una supercookie para suplantar las solicitudes de los usuarios y enviar solicitudes a otros sitios web que comparten el mismo dominio de nivel superior o sufijo público. Por ejemplo, una supercookie que se origina en el dominio .com podría dañar las solicitudes a ejemplo.com, incluso si la cookie no se originó en ejemplo.com. Puede explotarse para falsificar inicios de sesión o cambiar la información del usuario.
galletas zombies
Las cookies zombies son cookies que se recrean automáticamente después de que el usuario las elimina. Esto se hace mediante un script que almacena el contenido de la cookie en otra ubicación, como un almacén de contenido Flash, un almacén HTML5 o algún otro mecanismo del lado del cliente.
2.3. Estructura de las cookies
Una cookie con un tamaño de 4KB, incluye 7 componentes principales:
- Nombre
- Valor
- Caduca (fecha de vencimiento)
- Ruta (ruta donde la cookie es válida, "/" significa que la cookie es válida en cualquier ruta)
- Dominio
- Seguro
- Sólo Http
Los dos primeros componentes (nombre y valor) son obligatorios.
2.4. Usar
Gestión de sesiones
Las cookies se pueden utilizar para mantener datos relacionados con el usuario en múltiples visitas al sitio web. Las cookies son una solución para crear un carrito de compra, un carrito de compra virtual que ayuda al usuario a guardar los artículos que elige mientras navega por los productos.
Las aplicaciones de carrito de compras actuales a menudo almacenan la lista de artículos en el carrito en la base de datos del lado del servidor en lugar de almacenarla en una cookie del lado del cliente. El servidor web normalmente enviará una cookie que contiene el identificador de sesión - ID de sesión (que es único). El navegador web devolverá este ID de sesión con la solicitud de compra de cada usuario.
Permitir a los usuarios iniciar sesión en sitios web es otra aplicación de las cookies. Normalmente, durante el primer inicio de sesión, el servidor web enviará al cliente una cookie que contiene el ID de la sesión. Los usuarios enviarán su información y la aplicación web autenticará la sesión y luego permitirá que el usuario utilice sus servicios.
Las cookies proporcionan un mecanismo de interacción cliente/servidor rápido y conveniente. Una de las ventajas de las cookies es que almacenan la información del usuario en un archivo ubicado en el ordenador del usuario. Esto reduce significativamente el espacio de almacenamiento y el tiempo de procesamiento del servidor.
Personalizado
Las cookies se pueden utilizar para recordar la información personal de un usuario cuando visita un sitio web, para mostrar contenido más relevante a ese usuario cada vez que visita el sitio web nuevamente.
Un ejemplo destacado es la función de recomendación de libros de amazon.com. Cuando un usuario hace clic en un libro, Amazon le hará sugerencias sobre los próximos libros que el usuario debería consultar. Estas sugerencias se basan en los libros que los usuarios han buscado anteriormente y los libros que han elegido comprar.
Otro ejemplo es la función de sugerencias de búsqueda de la Búsqueda de Google. Cuando inicia sesión con su cuenta personal y realiza una búsqueda, Google le brindará sugerencias "solo para usted" y los resultados que desea siempre aparecerán en la parte superior de la lista.
Monitor
Las cookies de seguimiento se pueden utilizar para rastrear el historial de navegación de un usuario. Esto también se puede hacer utilizando la dirección IP de la computadora que envía la solicitud al sitio web o confiando en el campo Referente del encabezado de la solicitud HTTP, pero las cookies brindan más precisión. Esto se hace de la siguiente manera:
- Si un usuario visita un sitio web, pero esta solicitud no contiene una cookie, el servidor asumirá que es la primera vez que el usuario visita este sitio web; El servidor generará una cadena aleatoria y la enviará como una cookie al navegador junto con la página web solicitada.
- A partir de este momento, la cookie será enviada automáticamente por el navegador al servidor cada vez que se solicite una nueva página web en este sitio web, el servidor devolverá la página web solicitada con normalidad, pero con la URL de esa página web y el tiempo El acceso se guardará en un archivo de registro. Al analizar la información guardada en este archivo de registro, se revelará el historial de navegación de la persona, los sitios web visitados con frecuencia y los hábitos de navegación.
2.5. Despliegue

Las cookies son datos enviados desde el servidor al navegador. Luego, el navegador lo enviará de regreso al servidor sin cambiar el contenido interno, cada vez que el usuario envíe una solicitud al sitio web. Las cookies también pueden configurarse mediante un lenguaje de programación, como Javascript.
Cada navegador web puede almacenar al menos 300 cookies en un archivo de 4 KB y al menos 20 cookies por servidor o dominio.
Configurar cookies
El servidor web y el navegador se comunican entre sí a través de HTTP (Protocolo de transferencia de hipertexto). Por ejemplo, para acceder a la página http://www.example.org/index.html, el navegador se conecta al servidor enviando una solicitud HTTP como esta:
![Web11: Cookies HTTP y algunos problemas de seguridad Web11: Cookies HTTP y algunos problemas de seguridad]()
El servidor responderá enviando al navegador un paquete de texto simple, llamado respuesta HTTP. Este paquete puede contener una línea que contiene el contenido de la cookie:
![Web11: Cookies HTTP y algunos problemas de seguridad Web11: Cookies HTTP y algunos problemas de seguridad]()
Set-Cookie es un campo que indica al navegador que almacene la cookie y la envíe al servidor en el futuro cada vez que haya una solicitud al servidor (si la cookie aún está caducada). Por ejemplo, el navegador envía una solicitud a http://www.example.org/spec.html enviando una solicitud HTTP como esta:
![Web11: Cookies HTTP y algunos problemas de seguridad Web11: Cookies HTTP y algunos problemas de seguridad]()
Esta es una solicitud a otra página que pertenece al mismo servidor. En este caso, el servidor entenderá que esta solicitud está relacionada con la solicitud anterior y responde enviando la página web solicitada al navegador, posiblemente agregando otros valores de cookies.
El servidor puede modificar el valor de la cookie enviando el campo Set-Cookie: nombre=valor en la respuesta HTTP al navegador. Luego, el navegador reemplazará el valor de la cookie anterior con este nuevo valor.
El valor de la cookie puede incluir cualquier carácter ASCII imprimible excepto “,””, “;” y espacios en blanco. Los nombres de las cookies tampoco pueden contener el carácter '=", ya que ese es el carácter que separa el nombre y el valor.
El término cookie de migajas se utiliza a veces para referirse al par nombre-valor de una cookie.
Las cookies también pueden establecerse mediante Javascript o un lenguaje de programación similar. En Javascript, el objeto document.cookie se utiliza para configurar cookies. El atributo HttpOnly es responsable de evitar que scripts incorrectos lean el contenido de las cookies.
Propiedades de las cookies
Además del par nombre-valor, el servidor también puede establecer otras propiedades de cookies: Dominio, Ruta, Expirse, Max-Age, Secure y HttpOnly. El navegador no enviará estos atributos al servidor, solo enviará el par nombre-valor. El navegador utiliza estos atributos para determinar cuándo eliminar cookies, bloquear cookies o enviar cookies al servidor.
Dominio y ruta
El dominio y la ruta determinan el alcance de la cookie. Permiten al navegador determinar cuándo enviar cookies al servidor. Si no se especifican, de forma predeterminada utilizan el dominio y la ruta del objeto solicitado. Sin embargo, existe una diferencia entre una cookie configurada para foo.com sin el atributo de dominio y una cookie configurada con el atributo de dominio foo.com. En el primer caso, la cookie sólo se enviará cuando haya una solicitud a foo.com. En este último caso, la cookie se enviará a todos los subdominios de foo.com. El siguiente es un ejemplo de una directiva Set-Cookie de un sitio web después de que el usuario inicia sesión, desde una solicitud a docs.foo.com:
![Web11: Cookies HTTP y algunos problemas de seguridad Web11: Cookies HTTP y algunos problemas de seguridad]()
El primer LSID de cookie no tiene un atributo de dominio y tiene la ruta /cuentas. El navegador solo enviará cookies cuando la página solicitada esté contenida en docs.foo.com/accounts. Las dos cookies restantes, HSID y SSID, se envían de vuelta al servidor si hay una solicitud a cualquier subdominio de foo.com.
Las cookies también se pueden configurar solo para el dominio superior y sus subdominios. No se permitirá la instalación de cookies en www.foo.com desde www.bar.com por motivos de seguridad.
Caduca y edad máxima
El atributo Expires le dice al navegador cuándo eliminar la cookie. La fecha en Expires se ve así: “Wdy, DD Mon AAAA HH:MM:SS GMT”. Max-Age también se utiliza para indicar la fecha de vencimiento de una cookie. Consideremos el siguiente ejemplo:
![Web11: Cookies HTTP y algunos problemas de seguridad Web11: Cookies HTTP y algunos problemas de seguridad]()
La primera cookie expirará el 15 de enero de 2013 y será utilizada por el navegador cuando expire. La segunda cookie made_write_conn no caduca y se utiliza como cookie de sesión; se eliminará cuando se apague el navegador. La tercera cookie reg_fb_gate, tiene fecha de caducidad en el pasado, será eliminada inmediatamente.
Seguro y solo Http
Las propiedades Secure y HttpOnly son nulas; en cambio, su presencia indica que se aplican las bases Secure y HttpOnly.
El atributo Seguro mantiene la transmisión de cookies dentro de una conexión cifrada. Si el servidor web configura una cookie con el atributo seguro desde una conexión no segura, la cookie aún puede ser interceptada por un ataque de intermediario.
El atributo HttpOnly indica al navegador que no exponga cookies a través de una conexión que no sea HTTP (o HTTPS), como Javascript, y por lo tanto dificulta la obtención de cookies explotando las vulnerabilidades de Cross-Site Scripting (XSS).
3. Algunos problemas de seguridad al utilizar cookies
Si un sitio web utiliza un ID de sesión para identificar la sesión de un usuario, un atacante podría robar la cookie para hacerse pasar por el usuario. A continuación se muestran algunos escenarios comunes de robo de cookies:
Escuchar a escondidas
![Web11: Cookies HTTP y algunos problemas de seguridad Web11: Cookies HTTP y algunos problemas de seguridad]()
El tráfico en una red puede ser interceptado y leído por un tercero (que no sea el destinatario y el remitente). Este tráfico incluye cookies. Si la transmisión no está cifrada, un atacante puede leer la información confidencial contenida en la cookie. Y aprovechando esta información, los atacantes se harán pasar por usuarios para realizar acciones peligrosas, como transacciones bancarias.
Este problema se puede resolver utilizando un protocolo seguro entre la computadora del usuario y el servidor: el protocolo HTTPS. El servidor puede utilizar el indicador Seguro al configurar cookies. En ese caso, la cookie sólo se enviará a través de un canal cifrado, como una conexión SSL.
secuencias de comandos entre sitios
![Web11: Cookies HTTP y algunos problemas de seguridad Web11: Cookies HTTP y algunos problemas de seguridad]()
Los lenguajes de scripting, como Javascript, pueden leer valores de cookies y enviarlos a servidores arbitrarios.
Supongamos que un sitio web tiene un error de secuencias de comandos entre sitios, los piratas informáticos pueden insertar código malicioso, como el siguiente:
![Web11: Cookies HTTP y algunos problemas de seguridad Web11: Cookies HTTP y algunos problemas de seguridad]()
Cuando la víctima hace clic en el enlace anterior, el navegador ejecutará el script en el atributo onclick: enviando la cookie de la víctima al servidor attacker.com.
Los scripts entre sitios son una de las vulnerabilidades comunes de los sitios web (ocuparon el tercer lugar entre las 10 vulnerabilidades más comunes en 2013, según OWASP).
El riesgo de esta vulnerabilidad se puede limitar configurando el indicador HttpOnly para las cookies. En ese momento, los lenguajes de programación no accederán a las cookies.
Falsificación de solicitudes entre sitios
CSRF (falsificación de solicitud entre sitios) o ataque con un solo clic, es un método para explotar las vulnerabilidades de un sitio web mediante el cual las víctimas (usuarios autorizados por el sitio web sin su conocimiento) ejecutan comandos no autorizados.
CSRF engañará al navegador de la víctima para que envíe solicitudes http a aplicaciones web. En caso de que la sesión de la víctima no haya caducado, las solicitudes anteriores se realizarán con los derechos de autenticación de la víctima.
Por ejemplo, la víctima Bob está realizando transacciones en el sitio web de cierto banco X. Fred es el atacante, este tipo sabe cómo funciona el sitio web del banco X cuando quiere transferir dinero de la cuenta A a la cuenta B de la siguiente manera:
http://bank.example.com/withdraw?account=accountA&amount=100&for=accountB
Le enviará a Bob un mensaje malicioso.
Si el banco X almacena información de autenticación del usuario en una cookie y Bob hace clic en el enlace anterior, el dinero de Bob se transferirá a Fred.
Para limitar este riesgo, se pueden configurar parámetros de Expires para las cookies.
4. Conclusión
Las cookies se utilizan en la mayoría de las aplicaciones web actuales. También contiene riesgos potenciales que afectan significativamente a los usuarios. Por lo tanto, por parte del desarrollador, debemos comprender claramente las cookies y saber cómo configurar los parámetros necesarios para que la aplicación pueda ser más segura contra ataques de piratas informáticos.