SameSite = Relaxado por padrão - já está estável no Chrome 80 (embora ainda não seja para todos)

No outro dia, uma colega atenciosa (obrigado, Lena) relatou um bug estranho - o servidor normalmente configurava o cookie no navegador, mas não voltou. Tudo funcionou no dia anterior, mas agora o cookie estava pronto, mas depois de alguns segundos desapareceu magicamente (embora deva durar 24 horas). Ele foi reproduzido apenas por algumas pessoas na equipe e apenas no novo Chrome 80, mas o restante no Chrome tinha exatamente a mesma versão, tudo estava em ordem. Em outros navegadores, tudo funcionava como um relógio. Místico. Eles começaram a descobrir e, depois de algum tempo, o console do Chrome notou um aviso para o cabeçalho de resposta que definia o cookie:
A cookie associated with a cross-site resource at _your_domain_ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`.

Eles começaram a estudar o que era e, gradualmente, ficou claro como o erro surgiu e por que nem todos o mostraram. Como nosso serviço deve processar solicitações de domínios diferentes, esse SameSiteé apenas o nosso caso. Eles acrescentaram SameSite=None; Secure, e o problema foi resolvido para nós.

Por que é que?


Inicialmente, de acordo com o padrão HTTP, o navegador enviou cookies (ou apenas cookies) para qualquer solicitação ao domínio correspondente. Isso abriu oportunidades para um ataque CSRF, ou seja, permitiu que pessoas sem escrúpulos, sob um determinado conjunto de circunstâncias, tivessem acesso a alguns recursos sob o disfarce de inocentes inocentes, apenas usando seus cookies.

Em 2016, foi introduzido um atributo SameSiteque permite controlar se o navegador enviará cookies se a página enviar uma solicitação para outro domínio. Os desenvolvedores têm a oportunidade de bloquear a transferência de seus cookies, se a solicitação for executada em um site de terceiros. Para isso, o atributo SameSiteteve que ser explicitamente definido como Estrito.(os cookies são transmitidos somente mediante solicitações e transições do domínio ao qual pertencem) ou Lax (os cookies são transmitidos mediante a transição para o site de outros sites por um link direto, mas não são transmitidos mediante outras solicitações deles, por exemplo, quando um AJAX solicita ou faz upload de fotos ) A ausência SameSitefoi equivalente SameSite=None, ou seja, por padrão, os cookies ainda eram transmitidos em qualquer solicitação.

Em maio de 2019, os desenvolvedores do Google Chrome anunciaram que alterariam gradualmente esse comportamento e interpretariam a ausência do SameSite como SameSite=Lax(mais aqui) Ou seja - por padrão, o navegador bloqueará a transmissão de cookies para solicitações da página atual para outros recursos, exceto para cliques diretos no link. Os desenvolvedores do Firefox e Edge anunciaram que, com o tempo, também implementarão essa alteração em seus navegadores.

Para os usuários, esse comportamento do navegador é mais seguro. Os desenvolvedores de sites e serviços da web precisam ter em mente que, se ainda precisarem receber seus cookies ao solicitarem outros sites, terão que definir explicitamente seus atributos de cookies SameSite=None, Secure( Secure- porque essa solicitação, além disso, só deve chegar ao servidor por um canal seguro )

Como a inovação altera o padrão atual, e nem todos os sites poderão se adaptar rapidamente, a transição para um novo comportamento ocorre gradualmente. Inicialmente, ele foi ativado para um número limitado de usuários beta do Chrome e agora seu número está aumentando gradualmente. Informações reais estão disponíveis aqui . A última entrada no link:
Última atualização em 9 de março de 2020.

Começamos a aplicar o novo comportamento para o Chrome 80 estável, mas não para 100% dos usuários. A distribuição controlada é para uma população inicial limitada,
Ou seja, o período de testes beta está atrasado e os desenvolvedores do Chrome começaram a incluir lentamente novas funcionalidades entre os usuários comuns. O que é bom em princípio, pois é realmente mais seguro.

Você pode restaurar o comportamento antigo através das configurações : na barra de endereços do Chrome, digite chrome://flags, vá para a página, encontre o item de cookies padrão SameSite como padrão e defina-o como Desativado . Mas isso é mais adequado para testes do que para usuários comuns. Da mesma forma, se o Chrome 80 ainda estiver executando o comportamento antigo, você poderá forçar a nova funcionalidade definindo a mesma configuração como Ativado .

Portanto, se seu site precisar receber cookies ao solicitar domínios diferentes - esteja preparado para as próximas alterações (e quem estiver pronto é bom para isso). Bom para todos!

Adicionado por:
xdenserindicado nos comentários que algumas versões mais antigas dos navegadores não suportam SameSite=None, não aceitando esses cookies ou processando-os de maneira não-padrão. Entre eles estão os navegadores para desktops e dispositivos móveis. A página https://www.chromium.org/updates/same-site/incompatible-clients fornece uma lista de navegadores e uma possível solução para o problema (em pseudocódigo, mas bastante detalhado). Os autores sugerem a detecção de versões problemáticas dos navegadores por título useragente não definem seu atributo de cookies SameSite=None.

Adicionado 2:
Em relação à situação com o COVID-19, a partir de 3 de abril de 2020, o Google suspende temporariamente a implementação das alterações descritas no processamento do SameSite, para garantir o bom funcionamento dos serviços de Internet. Nos dispositivos em que as alterações já foram aplicadas, elas serão canceladas.
(c) blog.chromium.org/2020/04/temporariamente-rolling-back-samesite.html

Fontes:
web.dev/samesite-cookies-explained
www.chromium.org/updates/same-site
www.chromestatus.com/ feature / 5088147346030592
www.chromium.org/updates/same-site/incompatible-clients
blog.chromium.org/2020/04/temporariamente-rolling-back-samesite.html

All Articles