Cookies con estado particionado independiente (CHIPS)

Permite a los desarrolladores habilitar una cookie en el almacenamiento "particionado", con un jar de cookies independiente para cada sitio de nivel superior.

Estado de implementación

Navegadores compatibles

  • 114
  • 114
  • x
  • x

Origen

¿Qué es CHIPS?

Las cookies con estado particionado independiente (CHIPS) permiten que los desarrolladores opten por una cookie en el almacenamiento particionado, con contenedores de cookies independientes por sitio de nivel superior, lo que mejora la privacidad y 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 entre sitios.

Los navegadores están avanzando en la eliminación gradual de las cookies de terceros no particionadas, por lo que CHIPS, la API de Storage Access y los Conjuntos de sitios web relacionados serán la única forma de leer y escribir cookies de contextos entre sitios, como iframes, cuando se bloqueen las cookies de terceros.

Diagrama que muestra cómo se pueden compartir las comidas 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 la misma cookie cuando el servicio está incorporado en otros sitios de nivel superior.

CHIPS introduce un nuevo atributo de cookie, Partitioned, para admitir cookies entre sitios particionadas por 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 donde se configura 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 donde se establecieron inicialmente.

Diagrama en el que se muestra que dos sitios web diferentes que incorporan un tercero en 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 está incorporado 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 Particionada, la cookie se guarda en un jar particionado designado solo para las cookies que el sitio C establece cuando está incorporado 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 marco C incorporado no recibirá la cookie que se estableció cuando C se incorporó en el sitio A.

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

Diagrama que muestra que no se comparten las cookies cuando el mismo tercero está incorporado 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 sitio de nivel superior.

Casos de uso

Por ejemplo, es posible que el sitio retail.example trabaje con un servicio de terceros support.chat.example para incorporar un cuadro de chat de asistencia en su sitio. En la actualidad, muchos servicios de chat integrables dependen de las cookies para guardar el estado.

Diagrama que muestra un sitio web con un widget de chat
Sitio de nivel superior Retail.example donde se incorpora un servicio de terceros support.chat.example.

Sin la capacidad de establecer una cookie entre sitios, support.chat.example necesitaría encontrar métodos alternativos, a menudo más complejos, para almacenar el estado. De manera alternativa, tendría que estar incorporado en la página de nivel superior, lo que supone riesgos, ya que 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 ofrece una opción más sencilla para seguir usando cookies entre sitios, sin los riesgos asociados con las cookies no particionadas.

Los ejemplos de casos de uso de CHIPS incluyen cualquier situación en la que los subrecursos entre sitios requieran una noción de sesión o estado persistente que se limita a la actividad de un usuario en un solo sitio de nivel superior, como:

  • Incorporaciones de chat de terceros
  • Incorporaciones de mapa de terceros
  • Incorporaciones de pagos de terceros
  • Balanceo de cargas de CDN del subrecurso
  • Proveedores de CMS sin interfaz gráfica
  • Dominios de zonas de pruebas para entregar contenido de usuarios que no son de confianza (como googleusercontent.com y githubusercontent.com)
  • CDN de terceros que usan cookies para publicar contenido cuyo acceso está controlado por el estado de autenticación en el sitio de origen (por ejemplo, fotos de perfil de sitios de redes sociales alojados en CDN de terceros)
  • Frameworks de frontend que se basan en APIs remotas que usan cookies en sus solicitudes
  • Anuncios incorporados que necesitan un alcance de estado por publicador (por ejemplo, captar las preferencias de anuncios de los usuarios para ese sitio web)

Por qué CHIPS usa un modelo de partición de aceptación

A medida que los navegadores eliminan de forma gradual las cookies de terceros no particionadas, se intentaron otros enfoques para la partición.

Firefox anunció que particiona todas las cookies de terceros de forma predeterminada en el modo estricto de ETP y en el modo de navegación privada, por lo que el sitio de nivel superior particiona todas las cookies entre sitios. Sin embargo, particionar cookies sin la aceptación de terceros puede generar errores inesperados, ya que algunos servicios de terceros tienen servidores creados que esperan una cookie de terceros no particionada.

Anteriormente, Safari intentaba particionar cookies basadas en heurísticas, pero finalmente optó por bloquearlas por completo, citando la confusión de los desarrolladores como uno de los motivos. Recientemente, Safari expresó interés en un modelo de aceptación.

Lo que distingue a CHIPS de las implementaciones existentes de cookies particionadas es la habilitación de terceros. Las cookies se deben configurar con un atributo nuevo para que se envíen en las solicitudes entre partes una vez que las cookies de terceros (sin particiones) queden obsoletas.

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

Actualmente, las cookies tienen clave en el nombre de host o el dominio del sitio que las establecen, 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 habilitan la partición tendrán doble clave en su clave de host y clave de partición.

La clave de partición de una cookie es el sitio (dominio registrable y esquema) de la URL de nivel superior que el navegador estaba visitando al inicio de la solicitud al extremo que estableció 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").

Asimismo, la clave de partición de una solicitud es el sitio de la URL de nivel superior que el navegador visita cuando comienza una solicitud. Los navegadores solo deben enviar una cookie con el atributo Partitioned en las solicitudes que tengan la misma clave de partición que esa cookie.

Así se ve la clave de cookie del 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 integrado C 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 las establecen y se 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 plataforma web que permiten habilitar el acceso limitado de cookies entre sitios con fines específicos para el usuario.

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

Considera la API de Storage Access y los conjuntos de sitios web relacionados en situaciones en las que necesites que la misma cookie esté disponible para un servicio incorporado en varios sitios relacionados.

CHIPS permite que un servicio actúe como un componente aislado en varios sitios, donde no es necesario que la misma cookie esté disponible en varios sitios. Si el servicio configura 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 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 se base en una partición de cookies compartida entre sitios dentro de un RWS, puedes proporcionar ejemplos y comentarios sobre el problema de GitHub.

Demostración

En esta demostración, se explica el funcionamiento de 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 cookie particionada y una 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 un contexto de varios sitios.

Cuando se permiten las cookies de terceros, el sitio B también puede configurar la cookie no particionada y acceder a ella.

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

Cómo usar las 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 las Herramientas para desarrolladores.
  3. Haz clic en la pestaña Application.
  4. Navega a Aplicación > Almacenamiento > Cookies.
  5. Haz clic en https://chips-site-b.glitch.me.

Las Herramientas para desarrolladores mostrarán todas las cookies del origen seleccionado.

Cookies del sitio B en la pestaña de la aplicación de Herramientas para desarrolladores.

El sitio B solo puede establecer la cookie particionada en un contexto de varios sitios; la cookie no particionada 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 __cookie particionada por host.
  1. Haz clic en Ir al sitio B.
  2. En Herramientas para desarrolladores, navega a Aplicación > Almacenamiento > 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, particionadas y no particionadas.

En este caso, como estás en el sitio B en un contexto de nivel superior, puedes establecer 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 de la app de Herramientas para desarrolladores cuando visitas B como un sitio de nivel superior. __La cookie de partición de host 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 __Host-partitioned-cookie con la clave de partición del sitio de nivel superior https://chips-site-a.glitch.me.

Pestaña Red 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 casilla Mostrar las solicitudes de cookies filtradas, Herramientas para desarrolladores mostrará que la cookie no particionada está bloqueada, destacada en amarillo con un cuadro de información: "Esta cookie se bloqueó debido a las preferencias del usuario".

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

En Aplicación > Almacenamiento > Cookies, haz clic en https://chips-site-b.glitch.me para mostrar lo siguiente:

  • unpartitioned-cookie con la clave de partición vacía
  • La cookie __Host-partitioned-cookie con la clave de partición https://chips-site-a.glitch.me.
Cookies del sitio B en la pestaña Aplicación 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 el iframe del sitio B no puede acceder a él cuando está incorporado 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 las Herramientas para desarrolladores.
  • Haz clic en la pestaña Application.
  • Navega a Aplicación > Almacenamiento > Cookies.
  • Haz clic con el botón derecho en https://chips-site-b.glitch.me.
  • Haz clic en Borrar.

Recursos