Compreensão dos cookies

Um cookie é um bloco de dados armazenado no navegador que é usado para manter o estado e outras informações necessárias para um site executar seus recursos.

Um cookie é um pequeno arquivo que os sites armazenam na máquina dos usuários. As informações armazenadas viajam entre o navegador e o site.

Cada cookie é um par de chave-valor com uma série de atributos que controlam quando e onde o cookie é usado. Esses atributos são usados para definir datas de validade, por exemplo, ou indicar que o cookie só deve ser enviado por HTTPS. É possível definir um cookie em um cabeçalho HTTP ou por meio da interface JavaScript.

Os cookies são um dos métodos disponíveis para adicionar o estado persistente aos sites. Ao longo dos anos, esses recursos cresceram e evoluíram, mas deixaram a plataforma com alguns problemas de legado problemáticos. Para resolver esse problema, os navegadores (incluindo Chrome, Firefox e Edge) estão mudando de comportamento para aplicar mais padrões que preservam a privacidade.

Cookies em ação

Digamos que você tenha um blog e queira exibir a seção "Novidades" promoção na sua usuários. Os usuários podem dispensar a promoção e, em seguida, não a verão novamente por um tempo. Você pode armazenar essa preferência em um cookie e configurá-la para expirar em um mês (2.600.000 segundos) e enviá-lo apenas por HTTPS. Esse cabeçalho seria isso:

Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
Três cookies sendo enviados de um servidor a um navegador em resposta
Os servidores definem cookies usando o cabeçalho Set-Cookie.

Quando o leitor visualiza uma página que atende a esses requisitos, ele está em uma uma conexão segura e o cookie tem menos de um mês - o navegador enviará este cabeçalho na solicitação:

Cookie: promo_shown=1
Três cookies sendo enviados de um navegador para um servidor em uma solicitação
Seu navegador envia cookies de volta no cabeçalho Cookie.

Você também pode adicionar e ler os cookies disponíveis para esse site em JavaScript usando document.cookie: Fazer uma atividade para document.cookie criará ou substituir um cookie por essa chave. Por exemplo, tente o seguinte em seu console JavaScript do navegador:

→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"

A leitura de document.cookie gerará todos os cookies acessíveis na atual contexto, com cada cookie separado por ponto e vírgula:

→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
JavaScript acessando cookies no navegador
O JavaScript pode acessar cookies usando document.cookie.

Se você tentar fazer isso em uma seleção de sites populares, perceberá que a maioria eles definiram muito mais do que apenas três cookies. Na maioria dos casos, cookies são enviados em cada solicitação para esse domínio, que tem um número de e as implicações disso. A largura de banda de upload costuma ser mais restrita do que o download para seus usuários, de modo que a sobrecarga em todas as solicitações de saída está atrasando seu tempo ao primeiro byte. Seja conservador no número e no tamanho dos cookies que você definir. Marca o uso do atributo Max-Age para ajudar a garantir que os cookies não fiquem esperando por mais tempo que o necessário.

O que são cookies primários e de terceiros?

Se você voltar para a mesma seleção de sites que estava conferindo antes, provavelmente notou que havia cookies presentes para uma variedade de domínios, não apenas aquele que você estava visitando no momento. Os cookies que correspondem ao domínio do do site atual, ou seja, o que é exibido na barra de endereços do navegador, são chamadas como cookies primários. Da mesma forma, cookies de domínios que não sejam o site atual são chamados de cookies de terceiros. Isso não é um valor absoluto um rótulo, mas é relativo ao contexto do usuário. o mesmo cookie pode ser primários ou de terceiros, dependendo do site em que o usuário está no momento.

Três cookies sendo enviados a um navegador por solicitações diferentes na mesma página
Os cookies podem vir de vários domínios diferentes em uma página.

Continuando com o exemplo acima, digamos que uma de suas postagens de blog tenha um de um gato incrível, e ela está hospedada em /blog/img/amazing-cat.png: Por ser uma imagem tão incrível, outra pessoa usa esses dados diretamente no site. Se um visitante tiver acessado seu blog e promo_shown e, quando visualizarem amazing-cat.png no outro o site de uma pessoa. O cookie será enviado na solicitação da imagem. Isso não é muito útil para ninguém, porque promo_shown não é usado para nada no site desta pessoa, está apenas adicionando sobrecarga à solicitação.

Se isso é um efeito não intencional, por que você faria isso? É isso que permite que os sites mantenham o estado quando estão sendo usados em um contexto de terceiros. Por exemplo, se você incorporar um vídeo do YouTube ao seu site, os visitantes verão a opção "Assistir mais tarde" no player. Se o visitante for já estiver conectado ao YouTube, essa sessão está sendo disponibilizada no player incorporado por um cookie de terceiros, ou seja, a opção "Assistir mais tarde" vai salve o vídeo de uma só vez em vez de solicitar que o usuário faça login ou ter que saia da página e volte ao YouTube.

O mesmo cookie é enviado em três contextos diferentes
Em um contexto de terceiros, um cookie é enviado ao visitar diferentes páginas.

Uma das propriedades culturais da Web é que ela tende a ser aberta por padrão. Isso é parte do que tornou possível que tantas pessoas conteúdo e aplicativos próprios lá. No entanto, isso também trouxe vários questões de segurança e privacidade. Os ataques de falsificação de solicitações entre sites (CSRF, na sigla em inglês) dependem de que os cookies são anexados a qualquer solicitação de uma determinada origem, não importa quem inicia a solicitação. Por exemplo, se você visitar evil.example, ele poderá acionarão solicitações para your-blog.example e seu navegador será anexado os cookies associados. Se seu blog não for cuidadoso com a forma como valida essas solicitações, o evil.example poderá acionar ações como excluir postagens ou adicionar o próprio conteúdo.

Os usuários também estão se tornando mais conscientes de como os cookies podem ser usados para rastrear sua a atividade em vários sites. No entanto, até agora não havia uma maneira de declarar explicitamente sua intenção com o cookie. Seu cookie promo_shown deve ser enviados somente em contexto próprio, enquanto um cookie de sessão para um widget deve ser incorporado a outros sites está lá intencionalmente para fornecer o estado conectado em um contexto de terceiros.

Para declarar explicitamente sua intenção com um cookie, defina o atributo SameSite apropriado.

Para identificar seus cookies primários e definir atributos apropriados, confira Receitas de cookies primários.