Permitir que los desarrolladores habiliten una cookie en el modo “particionada” con un almacén de cookies independiente para cada sitio de nivel superior.
Estado de implementación
- Compatible de forma predeterminada en Chrome 114 y versiones posteriores.
- Hay una prueba de origen, ya completada, disponible de la versión 100 a la 116 de Chrome.
- Consulta los artículos Intención de experimentar y Intención de envío.
¿Qué es CHIPS?
Las cookies con estado particionado independiente (CHIPS) permiten a los desarrolladores habilitar una cookie en el almacenamiento particionado, con contenedores de cookies separados por sitio de nivel superior, lo que mejora la privacidad y la seguridad del usuario.
Sin particiones, 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 en proceso de eliminar gradualmente las cookies de terceros no particionadas, por lo que CHIPS, la API de acceso al almacenamiento 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.
CHIPS presenta 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 particionada de terceros 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 que establece un servicio de terceros solo se pueden leer dentro del mismo contexto incorporado del sitio de nivel superior en el que se establecieron inicialmente.
En el caso de 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 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 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 se incorporó en A tampoco se enviará en esa solicitud.
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. En la actualidad, muchos servicios de chat que se pueden incorporar dependen de las cookies para guardar el estado.
Sin la capacidad de establecer una cookie entre sitios, support.chat.example
tendría que buscar métodos alternativos, a menudo más complejos, para almacenar el estado. Como alternativa, se debe incorporar en la página de nivel superior, lo que genera 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 brinda una opción más fácil para seguir usando cookies entre sitios, sin los riesgos asociados con las cookies no particionadas.
Los casos de uso de ejemplo de CHIPS incluyen cualquier situación en la que los subrecursos entre sitios requieren alguna noción de sesión o estado persistente que se limite a la actividad del usuario en un solo sitio de nivel superior, como:
- Incorporaciones de chat de terceros
- Incorporaciones en mapas de terceros
- Incorporación de pagos de terceros
- Balanceo de cargas de CDN de subrecursos
- Proveedores de CMS sin interfaz gráfica
- Dominios de zona de pruebas para entregar contenido que no sea de confianza para los usuarios (por ejemplo, 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 propio (por ejemplo, las fotos de perfil en 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, para captar las preferencias de anuncios de los usuarios para ese sitio web)
Por qué CHIPS usa un modelo de partición opcional
A medida que los navegadores eliminan gradualmente las cookies de terceros no particionadas, se intentaron otros dos enfoques para la partición.
Firefox anunció que particiona todas las cookies de terceros de forma predeterminada en el modo estricto de ETP y el modo de navegación privada, por lo que el sitio de nivel superior particionará todas las cookies entre sitios. Sin embargo, particionar cookies sin la habilitación de un tercero puede generar errores inesperados, ya que algunos servicios de terceros tienen servidores compilados que esperan una cookie de terceros no particionada.
Safari anteriormente intentó particionar cookies basadas en heurísticas, pero finalmente decidió bloquearlas por completo y mencionó la confusión de los desarrolladores como una de las razones. Recientemente, Safari expresó interés en un modelo de habilitación.
Lo que distingue a CHIPS de las implementaciones existentes de cookies particionadas es la aceptación de terceros. Las cookies se deben configurar con un atributo nuevo para que se envíen en solicitudes entre terceros una vez que las cookies de terceros (no particionadas) queden obsoletas.
Si bien las cookies de terceros aún existen, el atributo Partitioned
proporciona la habilitación de 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.
Diseño técnico de la partición de cookies
Actualmente, las cookies se codifican en el nombre de host o el dominio del sitio que las establece, 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.
Una clave de partición de cookie es el sitio (esquema y dominio registrable) de la URL de nivel superior que el navegador visitó al comienzo 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")
.
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 comienzo de 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 en el ejemplo anterior antes y después de CHIPS.
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 prácticas recomendadas 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 estén vinculadas 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 un acceso limitado a las cookies entre sitios para fines específicos para los usuarios.
Estas son alternativas a la partición CHIPS en la que se requiere acceso a cocinas no particionadas entre sitios.
Ten en cuenta 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 proporciona la capacidad para que un servicio actúe como un componente aislado en varios sitios, para los cuales 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 Conjuntos de sitios web relacionados se basa en la API de Storage Access y no se integra en la partición de CHIPS. Si tienes un caso de uso que se basa 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 demo, 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 configurar dos cookies: una 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 bloqueen 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 las cookies no particionadas y acceder a ellas.
Requisitos previos
- Chrome 118 o versiones posteriores
- Visita
chrome://flags/#test-third-party-cookie-phaseout
y habilita este parámetro de configuración
Usa DevTools para inspeccionar las cookies particionadas
- Visita https://chips-site-a.glitch.me.
- Presiona
Control+Shift+J
(oCommand+Option+J
en Mac) para abrir Herramientas para desarrolladores. - Haz clic en la pestaña Application.
- Navega a Aplicación > Almacenamiento > Cookies
- Haz clic en
https://chips-site-b.glitch.me
.
Las Herramientas para desarrolladores mostrarán todas las cookies del origen seleccionado.
El sitio B solo puede configurar la cookie particionada en un contexto de varios sitios; se bloqueará la cookie no particionada:
- Deberías ver
__Host-partitioned-cookie
con la clave de partición del sitio de nivel superiorhttps://chips-site-a.glitch.me
.
- Haga clic en Ir al sitio B.
- En Herramientas para desarrolladores, navega a Aplicación > Almacenamiento > Cookies
- Haz clic en
https://chips-site-b.glitch.me
.
En este caso, dado que se encuentra en el sitio B en un contexto de nivel superior, puede 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ónhttps://chips-site-b.glitch.me
.
Si regresas al sitio A, unpartitioned-cookie
ahora se almacenará en el navegador, pero no se podrá acceder a él desde el sitio A.
- Haz clic en Ir al sitio A.
- Haga clic en la pestaña Red.
- Haz clic en
https://chips-site-b.glitch.me
. - 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
.
Si marcas mostrar solicitudes de cookies filtradas, las Herramientas para desarrolladores mostrarán que la cookie no particionada está bloqueada, destacada en amarillo con un cuadro de información: "This cookie was blocked due to user preferences".
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ónhttps://chips-site-a.glitch.me
.
Borrar cookies
Para restablecer la demostración, borra todas las cookies del sitio:
- Presiona
Control+Shift+J
(oCommand+Option+J
en Mac) para abrir 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
- GitHub: Lee la explicación, plantea las preguntas y sigue la conversación.
- Asistencia para desarrolladores: Haga preguntas y participe en debates en el repositorio de asistencia para desarrolladores de Privacy Sandbox.