Cada cookie contiene un par clave-valor junto con varios atributos que controlan cuándo y dónde se usa la cookie.
La introducción del atributo SameSite
(definido en
RFC6265bis).
te permite declarar si tu cookie está restringida a un tercero o
el contexto del mismo sitio. Es útil comprender exactamente qué "sitio" significa aquí.
El sitio es la combinación del sufijo del dominio y la parte del dominio
antes. Por ejemplo, el dominio www.web.dev
es parte del sitio web.dev
.
Término clave: si el usuario está en www.web.dev
y solicita una imagen a
static.web.dev
, es una solicitud del mismo sitio.
La lista de sufijo público define las páginas que cuentan como
estén en el mismo sitio. No depende solo de dominios de nivel superior, como .com
,
pero también puede incluir servicios como github.io
. Esto permite
your-project.github.io
y my-project.github.io
para que se registren como sitios separados.
Término clave: si el usuario está en your-project.github.io
y solicita una imagen a
my-project.github.io
es una solicitud entre sitios.
Usa el atributo SameSite
para declarar el uso de cookies.
El atributo SameSite
de una cookie proporciona tres formas diferentes de controlar
este comportamiento. Puedes optar por no especificar el atributo o usar
Strict
o Lax
para limitar la cookie a solicitudes del mismo sitio.
Si estableces SameSite
como Strict
, la cookie solo se podrá enviar
contexto propio; es decir, si el sitio de la cookie coincide con el sitio que se muestra
en la barra de direcciones del navegador. Por lo tanto, si la cookie promo_shown
está configurada de la siguiente manera:
Set-Cookie: promo_shown=1; SameSite=Strict
Cuando el usuario está en tu sitio, la cookie se envía con la solicitud como se espera.
Sin embargo, si el usuario sigue un vínculo a tu sitio desde otro, la cookie
no se envía en esa solicitud inicial.
Esto es bueno para las cookies relacionadas con funciones que siempre están detrás de una
la navegación, como cambiar una contraseña o hacer una compra, pero también
restrictivo para una cookie como promo_shown
. Si el lector sigue el vínculo
al sitio, quiere que se envíe la cookie para que se pueda aplicar su preferencia.
SameSite=Lax
permite que el navegador envíe la cookie con estos permisos de nivel superior
de navegación. Por ejemplo, si otro sitio hace referencia al contenido de tu sitio, en
este caso usando la foto de tu gato y un vínculo a tu artículo como
sigue:
<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>
Con una cookie configurada en Lax
, como se muestra a continuación:
Set-Cookie: promo_shown=1; SameSite=Lax
Cuando el navegador solicita amazing-cat.png
para el blog de la otra persona, tu
sitio web no envía la cookie. Sin embargo, cuando el lector sigue
a cat.html
en tu sitio, esa solicitud incluye la cookie.
Te recomendamos usar SameSite
de esta forma y establecer las cookies que afectan el sitio web.
mostrar a Lax
, y las cookies relacionadas con las acciones del usuario a Strict
.
También puedes establecer SameSite
en None
para indicar que deseas que la cookie se
enviados en todos los contextos. Si proporciona un servicio que consumen otros sitios, como
widgets, contenido incorporado, programas de afiliados, publicidad o acceso en toda
varios sitios, usa None
para asegurarte de que tu intención sea clara.
Cambios en el comportamiento predeterminado sin SameSite
Navegadores compatibles
El atributo SameSite
es ampliamente compatible, pero no se ha adoptado ampliamente.
Antes, cuando se configuraban cookies sin SameSite
, se configuraban de forma predeterminada para enviarlas en
en todos los contextos, lo que deja a los usuarios vulnerables a CSRF y a
de filtración de información. Alentar a los desarrolladores a expresar su intención
y brindarles a los usuarios
una experiencia más segura, la propuesta de IETF,
Cookies cada vez mejores
establece dos cambios clave:
- Las cookies que no tienen un atributo
SameSite
se consideranSameSite=Lax
. - Las cookies con
SameSite=None
también deben especificarSecure
, lo que significa que requieren en un contexto seguro.
Ambos cambios son retrocompatibles con los navegadores que tienen
implementó la versión anterior del atributo SameSite
navegadores que no son compatibles con versiones anteriores de SameSite
. Están destinados a
reducir las probabilidades de que los desarrolladores la dependencia de las capacidades de los navegadores, el comportamiento predeterminado haciendo que las cookies
y el uso previsto explícito. Todos los clientes que no reconocen
SameSite=None
debe ignorarla.
SameSite=Lax
de forma predeterminada
Si envías una cookie sin especificar su atributo SameSite
, el navegador
trata esa cookie como si estuviera configurada en SameSite=Lax
. Aún recomendamos
Configura SameSite=Lax
de forma explícita para que la experiencia del usuario sea más coherente
en todos los navegadores.
El campo SameSite=None
debe ser seguro
Cuando creas cookies entre sitios con SameSite=None
, también debes configurarlas
en Secure
para que el navegador las acepte:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
Para probar este comportamiento a partir de Chrome 76, habilita
about://flags/#cookies-without-same-site-must-be-secure
y Firefox 69
estableciendo network.cookie.sameSite.noneRequiresSecure
en
about:config
También te recomendamos actualizar las cookies existentes a Secure
lo antes posible.
Si dependes de servicios que proporcionan contenido de terceros en tu sitio, asegúrate de que
tu proveedor de servicios actualiza sus cookies y cualquier fragmento o
las dependencias de tu sitio para asegurarte de que use el comportamiento nuevo.
SameSite
recetas de galletas
Si desea obtener más detalles sobre la actualización de las cookies para procesar correctamente estas
cambios a SameSite=None
y las diferencias en el comportamiento del navegador, consulta la
artículo de seguimiento Recetas de cookies de SameSite.
Gracias por las contribuciones y los comentarios de Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner y Vivek Sekhar.
Imagen hero de cookie de Pille-Riin Priske activado Eliminar salpicadura