Saltar al contenido principal




Actualice las cookies de su sitio para prepararse para los próximos cambios en el comportamiento del atributo SameSite.


Actualizado

Aparece en:
Seguro y a salvo

Cromo,
Firefox,
Borde, y otros cambiarán su comportamiento predeterminado de acuerdo con la iniciativa de IETF,
Cookies cada vez mejores
por lo tanto eso:

  • Cookies sin SameSite El atributo se tratará como SameSite=Lax, lo que significa que el comportamiento predeterminado será restringir las cookies a contextos propios solamente.
  • Cookies para uso entre sitios debe especificar SameSite=None; Secure para permitir la inclusión en el contexto de terceros.

Esta característica es la comportamiento predeterminado desde Chrome 84 estable en adelante. Si todavía no lo ha hecho, debe actualizar los atributos de sus cookies de terceros para que no se bloqueen en el futuro.

Compatibilidad con muchos navegadores

Ver el
Compatibilidad del navegador
sección de MDN Set-Cookie

página.

Casos de uso para cookies entre sitios o de terceros

Hay una serie de casos de uso y patrones comunes en los que las cookies deben enviarse en un contexto de terceros. Si proporciona o depende de uno de estos casos de uso, asegúrese de que usted o el proveedor estén actualizando sus cookies para asegurar que el servicio continúe funcionando correctamente.

Contenido dentro de un <iframe>

Contenido de un sitio distinto que se muestra en una <iframe> está en un contexto de terceros. Los casos de uso estándar aquí son:

  • Contenido incrustado compartido desde otros sitios, como videos, mapas, ejemplos de código y publicaciones sociales.
  • Widgets de servicios externos como pagos, calendarios, reserva y funcionalidad de reserva.
  • Widgets como botones sociales o servicios antifraude que crean menos obvios
    <iframes>.

Las cookies se pueden usar aquí para, entre otras cosas, mantener el estado de la sesión, almacenar preferencias generales, habilitar estadísticas o personalizar contenido para usuarios con cuentas existentes.

iframe-1779797

Si el contenido incrustado no proviene del mismo sitio que el contexto de navegación de nivel superior, es contenido de terceros.

Al mismo tiempo, puesto que la web es intrínsecamente componible, <iframes> se usan para incrustar contenido que además se visualiza en un contexto de nivel superior o propio. Las cookies usadas por ese sitio se considerarán cookies de terceros cuando el sitio se muestre dentro del marco. Si está creando sitios que desea que otros incrusten fácilmente y, a la vez, confíe en las cookies para que funcionen, además deberá asegurarse de que estén marcados para el uso entre sitios o que pueda retroceder con elegancia sin ellos.

Solicitudes «inseguras» en todos los sitios

Aunque «inseguro» puede parecer un poco preocupante aquí, esto se refiere a cualquier solicitud que pueda tener la intención de cambiar de estado. En la web, son principalmente solicitudes POST. Cookies marcadas como SameSite=Lax se enviará en navegaciones seguras de nivel superior, a modo de ejemplo, al hacer un clic en un link para ir a un sitio distinto. No obstante, algo como un
<form> el envío a través de POST a un sitio distinto no incluiría cookies.

safe-navigation-5952143

Si la solicitud entrante usa un método «seguro», se enviarán las cookies.

Este patrón se usa para sitios que pueden redirigir al usuario a un servicio remoto para realizar alguna operación antes de regresar, a modo de ejemplo, redirigir a un proveedor de identidad de terceros. Antes de que el usuario abandone el sitio, se define una cookie que contiene un token de un solo uso con la expectativa de que este token se pueda verificar en la solicitud de retorno para mitigar
Falsificación de solicitud entre sitios (CSRF)
Ataques Si esa solicitud de devolución llega a través de POST, será necesario marcar las cookies como SameSite=None; Secure.

Recursos remotos

Cualquier recurso remoto en una página puede depender de las cookies que se enviarán con una solicitud, desde <img> etiquetas, <script> etiquetas, etc. Los casos de uso comunes incluyen el seguimiento de píxeles y la personalización de contenido.

Esto además se aplica a las solicitudes iniciadas desde su JavaScript por fetch o
XMLHttpRequest. Si fetch() se llama con el
credentials: 'include' opción
esto es un buen indicio de que se pueden esperar cookies en esas solicitudes. por XMLHttpRequest debe buscar instancias de la
withCredentials propiedad
siendo configurado en true. Esta es una buena indicación de que se pueden esperar cookies en esas solicitudes. Esas cookies deberán estar debidamente marcadas para que se incluyan en las solicitudes entre sitios.

Contenido dentro de un WebView

Un WebView en una aplicación nativa funciona con un navegador y deberá probar si se aplican las mismas restricciones o problemas. En Android, si WebView funciona con Chrome, los nuevos valores predeterminados no lo haré ser aplicados inmediatamente con Chrome 84. No obstante, la intención es aplicarlos en el futuro, por lo que todavía debe probar y prepararse para ello. Al mismo tiempo, Android posibilita que las aplicaciones nativas establezcan cookies de forma directa a través del
API de CookieManager. Del mismo modo que con las cookies configuradas a través de encabezados o JavaScript, considere incluir
SameSite=None; Secure si están destinados a un uso entre sitios.

Cómo poner en práctica SameSite hoy

Para las cookies en las que solo se necesitan en un contexto propio, lo ideal es marcarlas como SameSite=Lax o SameSite=Strict dependiendo de sus necesidades. Además puede elegir por no hacer nada y permitir que el navegador aplique su valor predeterminado, pero esto implica el riesgo de un comportamiento incoherente entre los navegadores y posibles advertencias de la consola para cada cookie.

Set-Cookie: first_party_var=value; SameSite=Lax

Para las cookies imprescindibles en un contexto de terceros, deberá asegurarse de que estén marcadas como SameSite=None; Secure. Tenga en cuenta que requiere ambos atributos juntos. Si solo especificas None sin Secure la cookie será rechazada. No obstante, existen algunas diferencias mutuamente incompatibles en las implementaciones del navegador, por lo que es viable que deba usar algunas de las estrategias de mitigación descritas en Manejo de clientes incompatibles a continuación.

Set-Cookie: third_party_var=value; SameSite=None; Secure

Manejo de clientes incompatibles

Como estos cambios para incluir None y el comportamiento predeterminado de la actualización es relativamente nuevo, existen inconsistencias entre los navegadores con respecto a cómo se manejan estos cambios. Puede consultar el
página de actualizaciones en chromium.org
para los problemas conocidos en este momento, no obstante, no es viable decir si es exhaustivo. Aunque esto no es ideal, existen soluciones alternativas que puede emplear durante esta etapa de transición. No obstante, la norma general es tratar a los clientes incompatibles como un caso especial. No cree una excepción para los navegadores que implementan las reglas más nuevas.

La primera opción es configurar las cookies de estilo nuevo y antiguo:

Set-cookie: 3pcookie=value; SameSite=None; Secure
Set-cookie: 3pcookie-legacy=value; Secure

Los navegadores que implementen el comportamiento más nuevo establecerán la cookie con el SameSite
valor, mientras que otros navegadores pueden ignorarlo o configurarlo incorrectamente. No obstante, esos mismos navegadores establecerán el 3pcookie-legacy Galleta. Al procesar las cookies incluidas, el sitio debe verificar primero la presencia de la nueva cookie de estilo y, si no se encuentra, después recurrir a la cookie heredada.

El siguiente ejemplo muestra cómo hacer esto en Node.js, haciendo uso de la
Marco expreso y es
analizador de cookies middleware.

const express = require('express');
const cp = require('cookie-parser');
const app = express();
app.use(cp());

app.get('/set', (req, res) => {
res.cookie('3pcookie', 'value', { sameSite: 'none', secure: true });
res.cookie('3pcookie-legacy', 'value', { secure: true });
res.end();
});

app.get('/', (req, res) => {
let cookieVal = null;

if (req.cookies['3pcookie']) {
cookieVal = req.cookies['3pcookie'];
} else if (req.cookies['3pcookie-legacy']) {
cookieVal = req.cookies['3pcookie-legacy'];
}

res.end();
});

app.listen(process.env.PORT);

La desventaja es que esto conlleva configurar cookies redundantes para cubrir todos los navegadores y necesita realizar cambios tanto en el punto de configuración como en la lectura de la cookie. No obstante, este enfoque debería cubrir todos los navegadores independientemente de su comportamiento y asegurar que las cookies de terceros sigan funcionando como antes.

Alternativamente en el momento de enviar el Set-Cookie encabezado, puede optar detectar el cliente a través de la cadena de agente de usuario. Referirse a
lista de clientes incompatibles
y después hacer uso de una biblioteca apropiada para su plataforma, a modo de ejemplo
ua-parser-js biblioteca en Node.js. Es aconsejable hallar una biblioteca para manejar la detección de agentes de usuario, puesto que probablemente no desee escribir esas expresiones regulares usted mismo.

El beneficio de este enfoque es que solo necesita realizar un cambio en el momento de configurar la cookie. No obstante, la advertencia necesaria aquí es que el rastreo de agentes de usuario es intrínsecamente frágil y puede que no atrape a todos los usuarios afectados.

Independientemente de la opción que elija, es recomendable asegurarse de tener una forma de registrar los niveles de tráfico que pasan por la ruta heredada. Asegúrese de tener un recordatorio o alerta para borrar esta solución una vez que esos niveles caigan por debajo de un umbral aceptable para su sitio.

Apoyo para SameSite=None en lenguajes, bibliotecas y marcos

La mayoría de idiomas y bibliotecas admiten la SameSite atributo para cookies, no obstante, la adición de SameSite=None es relativamente nuevo, lo que significa que es viable que deba arreglar algunos de los comportamientos estándar por ahora. Estos están documentados en el
SameSite ejemplos de repositorio en GitHub.

Obteniendo ayuda

Las cookies están por todas partes y es raro que un sitio haya auditado por completo dónde se configuran y utilizan, fundamentalmente una vez que agregas casos de uso entre sitios. Cuando se encuentra con un obstáculo, puede ser la primera vez que alguien lo encuentra, por lo tanto no dude en comunicarse:

Imagen de Cookie Hero por
Cayla1
en
Unsplash