Cookies con estado particionado independiente (CHIPS)

Permitir que los desarrolladores habiliten una cookie para el almacenamiento "particionado", con un contenedor de cookies independiente por sitio de nivel superior

Estado de implementación

Browser Support

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 141.
  • Safari: not supported.

Source

¿Qué es CHIPS?

Las Cookies Having Independent Partitioned State (CHIPS) permiten que los desarrolladores habiliten el almacenamiento particionado de una cookie, con contenedores de cookies separados por sitio de nivel superior, lo que mejora la privacidad y la seguridad del usuario.

Sin la partición, las cookies de terceros pueden permitir que los servicios hagan un seguimiento de los usuarios y unan su información de muchos sitios de nivel superior no relacionados. Esto se conoce como seguimiento en sitios cruzados.

CHIPS, la API de Storage Access y los Conjuntos de sitios web relacionados son la única forma de leer y escribir cookies desde contextos de sitios cruzados, como los elementos iframe, cuando se bloquean las cookies de terceros.

Diagrama que muestra cómo se pueden compartir las cookies entre dos sitios web diferentes.
Sin la partición de cookies, un servicio de terceros puede establecer una cookie cuando se incorpora en un sitio de nivel superior y acceder a esa misma cookie cuando el servicio se incorpora en otros sitios de nivel superior.

CHIPS introduce un nuevo atributo de cookie, Partitioned, para admitir cookies entre sitios que se particionan según el contexto de nivel superior.

Encabezado Set-Cookie:

Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;

JavaScript:

document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"

Una cookie de terceros particionada está vinculada al sitio de nivel superior en el que se establece inicialmente y no se puede acceder a ella desde otro lugar. De esta manera, las cookies establecidas por un servicio de terceros solo se pueden leer dentro del mismo contexto incorporado del sitio de nivel superior en el que se establecieron inicialmente.

Diagrama que muestra que dos sitios web diferentes que incorporan un tercero común ya no compartirán cookies para ese tercero.
Con la partición de cookies, un servicio de terceros que establece una cookie cuando se incorpora en un sitio de nivel superior no puede acceder a esa misma cookie cuando el servicio se incorpora en otros sitios de nivel superior.

Con las cookies particionadas, cuando un usuario visita el sitio A y el contenido incorporado del sitio C establece una cookie con el atributo Partitioned, la cookie se guarda en un contenedor particionado designado solo para las cookies que establece el sitio C cuando se incorpora en el sitio A. El navegador solo enviará esa cookie cuando el sitio de nivel superior sea A.

Cuando el usuario visita un sitio nuevo, por ejemplo, el sitio B, un elemento C iframe incorporado no recibirá la cookie que se estableció cuando C se incorporó en el sitio A.

Si un usuario visita el sitio C como sitio web de nivel superior, tampoco se enviará en esa solicitud la cookie particionada que C estableció cuando se incorporó en A.

Diagrama que muestra que las cookies no se comparten cuando el mismo tercero está integrado en dos sitios web diferentes.
Con la partición de cookies, un servicio de terceros que establece una cookie cuando se incorpora en un sitio no puede acceder a esa misma cookie, incluso cuando los usuarios visitan el servicio como un sitio de nivel superior.

Casos de uso

Por ejemplo, es posible que el sitio retail.example quiera trabajar con un servicio de terceros support.chat.example para incorporar un cuadro de chat de asistencia en su sitio. Actualmente, muchos servicios de chat incorporables dependen de las cookies para guardar el estado.

Diagrama que muestra un sitio web con un widget de chat incorporado
El sitio de nivel superior retail.example incorpora un servicio de terceros support.chat.example.

Sin la capacidad de establecer una cookie de sitios cruzados, support.chat.example debería encontrar métodos alternativos, a menudo más complejos, para almacenar el estado. Como alternativa, debería incorporarse en la página de nivel superior, lo que presenta riesgos porque permite que la secuencia de comandos support.chat.example tenga privilegios elevados en retail.example, como la capacidad de acceder a las cookies de autenticación.

CHIPS proporciona una opción más sencilla para seguir usando cookies entre sitios, sin los riesgos asociados a las cookies sin particionar.

Entre los casos de uso de ejemplo de CHIPS, se incluyen todos los casos en los que los recursos secundarios de sitios cruzados requieren alguna noción de sesión o estado persistente que se limite a la actividad de un usuario en un solo sitio de nivel superior, como los siguientes:

  • Incorporaciones de chat de terceros
  • Incorporaciones de mapas de terceros
  • Incorporaciones de pagos de terceros
  • Balanceo de cargas de CDN de subrecursos
  • Proveedores de CMS sin interfaz gráfica
  • Dominios de zona de pruebas para publicar contenido de usuarios no confiable (como googleusercontent.com y githubusercontent.com)
  • CDN de terceros que usan cookies para entregar contenido con control de acceso según el estado de autenticación en el sitio propio (por ejemplo, fotos de perfil en sitios de redes sociales alojados en CDN de terceros)
  • Frameworks de frontend que dependen de APIs remotas que usan cookies en sus solicitudes
  • Anuncios integrados que necesitan un estado con alcance por publicador (por ejemplo, capturar las preferencias de anuncios de los usuarios para ese sitio web)

Por qué CHIPS usa un modelo de partición con opción de inclusión

Cuando se bloquea el acceso a las cookies de terceros sin particionar, se intentaron otros enfoques para la partición.

Firefox anunció que particionará todas las cookies de terceros de forma predeterminada en su modo ETP Strict y en el modo de navegación privada, por lo que todas las cookies entre sitios se particionarán por el sitio de nivel superior. Sin embargo, particionar las cookies sin el consentimiento de terceros puede generar errores inesperados, ya que algunos servicios de terceros tienen servidores integrados que esperan una cookie de terceros sin particionar.

Anteriormente, Safari intentó particionar las cookies según la heurística, pero, finalmente, optó por bloquearlas por completo, y citó la confusión de los desarrolladores como uno de los motivos. Recientemente, Safari expresó interés en un modelo basado en la aceptación.

Lo que diferencia a CHIPS de las implementaciones existentes de cookies particionadas es la aceptación de terceros. Las cookies deben configurarse con un atributo nuevo para que se envíen en solicitudes entre sitios una vez que las cookies de terceros (sin particionar) queden obsoletas.

Si bien las cookies de terceros aún existen, el atributo Partitioned proporciona una opción para habilitar un tipo de comportamiento de cookies más restrictivo y seguro. CHIPS es un paso importante para ayudar a los servicios a realizar una transición sin problemas hacia un futuro sin cookies de terceros.

Actualmente, las cookies se indexan según el nombre de host o el dominio del sitio que las configuró, es decir, su clave de host.

Por ejemplo, para las cookies de https://support.chat.example, la clave de host es ("support.chat.example").

En CHIPS, las cookies que habiliten la partición tendrán dos claves: la clave del host y la clave de partición.

La clave de partición de una cookie es el sitio (esquema y dominio registrable) de la URL de nivel superior que el navegador estaba visitando al inicio de la solicitud al extremo que configuró la cookie.

En el ejemplo anterior, en el que https://support.chat.example está incorporado en https://retail.example, la URL de nivel superior es https://retail.example.

En ese caso, la clave de partición es ("https", "retail.example").

Del mismo modo, la clave de partición de una solicitud es el sitio de la URL de nivel superior que el navegador visita al inicio de una solicitud. Los navegadores solo deben enviar una cookie con el atributo Partitioned en solicitudes con la misma clave de partición que la de esa cookie.

Así se ve la clave de la cookie en el ejemplo anterior antes y después de CHIPS.

El sitio A y el sitio C incorporado comparten una cookie particionada. Cuando no está incorporado, el sitio C no puede acceder a la cookie particionada.
El sitio A y el sitio C incorporado comparten una cookie particionada. Cuando no está incorporado, el sitio C no puede acceder a la cookie particionada.

Antes de CHIPS

key=("support.chat.example")

Después de CHIPS

key={("support.chat.example"),("https", "retail.example")}

Diseño de seguridad

Para fomentar las buenas prácticas de seguridad, con CHIPS, las cookies solo se configuran y envían a través de protocolos seguros.

  • Las cookies particionadas se deben configurar con Secure.
  • Se recomienda usar el prefijo __Host- cuando se configuran cookies particionadas para que se vinculen al nombre de host (y no al dominio registrable).

Ejemplo:

Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

Alternativas a CHIPS

La API de Storage Access y los Conjuntos de sitios web relacionados (RWS) asociados son mecanismos de la plataforma web que permiten el acceso limitado a cookies de sitios cruzados para fines específicos orientados al usuario.

Estas son alternativas a la partición de CHIPS en las que se requiere acceso a cookies no particionadas y entre sitios.

Considera la API de Storage Access y los Conjuntos de sitios web relacionados en situaciones en las que necesitas que la misma cookie esté disponible para un servicio que está integrado en varios sitios relacionados.

CHIPS proporciona la capacidad de que un servicio actúe como un componente aislado en varios sitios, en los que no es necesario que la misma cookie esté disponible en varios sitios. Si el servicio establece una cookie particionada, su clave de partición será el sitio de nivel superior y esa cookie no estará disponible para otros sitios que también usen el servicio.

El diseño de los Conjuntos de sitios web relacionados se basa en la API de Storage Access y no se integra con la partición de CHIPS. Si tienes un caso de uso que depende de una partición de cookies compartida en sitios dentro de un RWS, puedes proporcionar ejemplos y comentarios en el problema de GitHub.

Demostración

En esta demostración, se explica cómo funcionan las cookies particionadas y cómo puedes inspeccionarlas en Herramientas para desarrolladores.

El sitio A incorpora un iframe del sitio B que usa JavaScript para establecer dos cookies: una particionada y otra no particionada. El sitio B muestra todas las cookies a las que se puede acceder desde esa ubicación con document.cookie.

Cuando se bloquean las cookies de terceros, el sitio B solo podrá establecer la cookie y acceder a ella con el atributo Partitioned en el contexto entre sitios.

Cuando se permiten las cookies de terceros, el sitio B también puede establecer y acceder a la cookie sin particionar.

Sitio A y sitio B
Izquierda: Se bloquearon las cookies de terceros. Derecha: Se permiten las cookies de terceros.

Requisitos previos

  1. Chrome 118 o versiones posteriores
  2. Visita chrome://flags/#test-third-party-cookie-phaseout y habilita este parámetro de configuración.

Usa Herramientas para desarrolladores para inspeccionar cookies particionadas

  1. Visita https://chips-site-a.glitch.me.
  2. Presiona Control+Shift+J (o Command+Option+J en Mac) para abrir DevTools.
  3. Haz clic en la pestaña Aplicación.
  4. Navega a Application > Storage > Cookies.
  5. Haz clic en https://chips-site-b.glitch.me.

DevTools mostrará todas las cookies del origen seleccionado.

Cookies del sitio B en la pestaña Application de Herramientas para desarrolladores.

El sitio B solo puede establecer la cookie particionada en el contexto de varios sitios, ya que la cookie sin particionar se bloqueará:

  • Deberías ver __Host-partitioned-cookie con la clave de partición del sitio de nivel superior https://chips-site-a.glitch.me.
Clave de partición para __Host-partitioned-cookie.
  1. Haz clic en Ir al sitio B.
  2. En Herramientas para desarrolladores, navega a Application > Storage > Cookies.
  3. Haz clic en https://chips-site-b.glitch.me.
Sitio B
En el nivel superior, el sitio B puede ver todas las cookies, tanto las particionadas como las que no lo están

En este caso, como estás en el sitio B en el contexto de nivel superior, puedes configurar y acceder a ambas cookies:

  • unpartitioned-cookie tiene una clave de partición vacía.
  • La cookie __Host-partitioned-cookie tiene la clave de partición https://chips-site-b.glitch.me.
Cookies del sitio B en la pestaña Application de Herramientas para desarrolladores cuando se visita B como un sitio de nivel superior. __Host-partitioned-cookie tiene la clave de partición https://chips-site-b.glitch.me.

Si vuelves al sitio A, unpartitioned-cookie ahora se almacena en el navegador, pero no se podrá acceder a él desde el sitio A.

  1. Haz clic en Ir al sitio A.
  2. Haga clic en la pestaña Red.
  3. Haz clic en https://chips-site-b.glitch.me.
  4. Haz clic en la pestaña Cookies.

Mientras estás en el sitio A, deberías ver el __Host-partitioned-cookie con la clave de partición del sitio de nivel superior https://chips-site-a.glitch.me.

Pestaña Network que muestra las cookies del iframe del sitio B a las que se puede acceder cuando se incorpora en el sitio A.

Si marcas la opción Mostrar solicitudes de cookies filtradas, las Herramientas para desarrolladores mostrarán que la cookie sin particionar está bloqueada, destacada en amarillo con una sugerencia: "Se bloqueó esta cookie según las preferencias del usuario".

Pestaña Network que muestra las cookies bloqueadas del iframe del sitio B.

En Aplicación > Almacenamiento > Cookies, si haces clic en https://chips-site-b.glitch.me, se mostrará lo siguiente:

  • unpartitioned-cookie con la clave de partición vacía.
  • Cookie __Host-partitioned-cookie con la clave de partición https://chips-site-a.glitch.me.
Cookies del sitio B en la pestaña Application de Herramientas para desarrolladores. La cookie __Host-partitioned-cookie tiene la clave de partición https://chips-site-a.glitch.me. Se muestra unpartitioned-cookie, pero no se puede acceder al iframe del sitio B cuando se incorpora en el sitio A.

Borrar cookies

Para restablecer la demostración, borra todas las cookies del sitio:

  • Presiona Control+Shift+J (o Command+Option+J en Mac) para abrir DevTools.
  • Haz clic en la pestaña Aplicación.
  • Navega a Application > Storage > Cookies.
  • Haz clic con el botón derecho en https://chips-site-b.glitch.me.
  • Haz clic en Borrar.

Recursos