Conceitos Principais
HttpOnly vs Armazenamento do Lado do Cliente
Cookies marcados como HttpOnly não podem ser acessados ou modificados por JavaScript do lado do cliente (cookieStore ou document.cookie). No entanto, o navegador anexa automaticamente cookies HttpOnly ativos aos cabeçalhos de requisição HTTP de saída (Cookie).
- Para inspecionar valores
HttpOnlyatuais: Veja o cabeçalhoCookiede qualquer requisição HTTP de saída viaget_network_request. - Para inspecionar como os cookies foram criados ou configurados: Veja o cabeçalho
Set-Cookiedas respostas de login/auth. - Para inspecionar cookies não
HttpOnly: Useevaluate_scriptcom a API modernacookieStore(async () => await cookieStore.getAll()).
Estratégia de Sessão: Aba Ativa vs Contexto Isolado
Escolha o ambiente de sessão correto para evitar contaminação de estado (ex.: tokens de análise ou autenticação residuais):
| Estratégia | Quando Usar | Configuração / Encerramento |
|---|---|---|
| Aba Ativa (Página Ativa) | Diagnosticando uma sessão de usuário ativa, erro 401/403 ao vivo ou estado atual. | Opera diretamente na página atualmente selecionada. |
Estado Limpo (isolatedContext) | Testando banners de consentimento de cookies, primeiras visitas ou garantias de zero cookies. | Chame new_page com um isolatedContext único (ex.: "consent-audit-1"). Ao finalizar, chame close_page. |
Capacidades e Limitações do Lado do Cliente
| Ação | JavaScript do Cliente (cookieStore / document.cookie) | Ferramentas de Rede e Contexto do DevTools |
|---|---|---|
| Ler Não-HttpOnly | ✅ async () => await cookieStore.getAll() | ✅ get_network_request (Requisição Cookie) |
| Ler HttpOnly | ❌ Bloqueado pela segurança do navegador | ✅ get_network_request (Requisição Cookie) |
Inspecionar Atributos (Domain, Path, SameSite, Expires) | ✅ async () => await cookieStore.getAll() | ✅ get_network_request (Resposta Set-Cookie) |
| Modificar / Excluir Não-HttpOnly | ✅ async () => await cookieStore.set(...) | N/A |
| Modificar / Excluir HttpOnly | ❌ Falha silenciosa em JavaScript | ✅ Use new_page(isolatedContext: ...) para estado limpo |
[!AVISO] Tentar limpar um cookie
HttpOnlyvia JavaScript (cookieStore.deleteoudocument.cookie = "...; max-age=0") falhará silenciosamente. Para testar em um estado não autenticado ou limpo, sempre crie um novo contexto isolado usandonew_pagecomisolatedContext.
Padrões de Fluxo de Trabalho
1. Diagnosticando Falhas de Autenticação e Redirecionamentos (401 / 403)
Quando uma requisição de página autenticada falha, retorna 401/403 ou redireciona para login:
- Listar Requisições Recentes: Chame
list_network_requestscomincludePreservedRequests: true. - Encontrar a Requisição Alvo: Localize a requisição com falha (401/403) ou redirecionamento (302/307).
- Inspecionar Cabeçalho
Cookiede Saída: Chameget_network_requestcom oreqid.- Verifique se o cabeçalho
Cookiefoi anexado e se os tokens necessários (ex.:SESSION_ID,auth_token) foram enviados.
- Verifique se o cabeçalho
- Acionar Inspeção Ativa (Se não houver requisição recente) :
- Se o cookie foi definido em uma sessão anterior e nenhuma chamada de rede está listada, acione uma requisição:
- Use
navigate_pagecomreload: true, OU - Chame
evaluate_scriptcom() => fetch(window.location.href)
- Use
- Em seguida, chame
get_network_requestna nova requisição para inspecionar o cabeçalhoCookieativo.
- Se o cookie foi definido em uma sessão anterior e nenhuma chamada de rede está listada, acione uma requisição:
- Rastrear a Requisição de Definição: Se o cookie estiver ausente ou rejeitado:
- Verifique as respostas de login/handshake anteriores por diretivas
Set-Cookie:- Incompatibilidade de Path: ex.:
Path=/apiquando a requisição é para/. - Incompatibilidade de Domínio: ex.:
Domain=api.example.comimpedindo cookies emsub.example.com. - Flag Secure em HTTP: cookies
Securenunca são enviados sobrehttp://não criptografado. - Bloqueio SameSite: cookies
SameSite=Strictsão omitidos em navegações entre sites. - Expiração: Verifique se
ExpiresouMax-Ageexpirou.
- Incompatibilidade de Path: ex.:
- Verifique as respostas de login/handshake anteriores por diretivas
2. Teste de Banner de Consentimento e Conformidade de Cookies
Para verificar se nenhum cookie não essencial ou de rastreamento é definido antes do consentimento ou ao recusar:
- Iniciar Limpo: Abra um novo contexto isolado com um nome dedicado:
{"url": "<PAGE_URL>", "isolatedContext": "consent-test-1"} - Registrar Cookies de Base: Antes de interagir com o banner, execute
evaluate_scriptcomasync () => await cookieStore.getAll(). - Inspecionar Requisições de Rede Prematuras e Problemas:
- Chame
list_network_requestspara garantir que nenhum beacon de rastreamento de terceiros foi acionado antes do consentimento. - Chame
list_console_messagescomtypes: ["issue"]para verificar avisos de rastreamento.
- Chame
- Interagir com Banner de Consentimento:
- Capture um snapshot com
take_snapshotpara localizar ouiddo botão "Recusar" ou "Rejeitar Todos". - Clique no botão com
click.
- Capture um snapshot com
- Verificar Diferença de Cookies:
- Execute
evaluate_scriptcomasync () => await cookieStore.getAll()após clicar para afirmar que apenas cookies estritamente necessários ou de estado de consentimento existem.
- Execute
- Testar Revogação de Consentimento (Auditoria de Ciclo de Vida):
- Ao auditar a retirada de consentimento ou mudanças de preferência:
- Localize e clique no "Configurações de Cookie", "Gerenciar Preferências" ou no acionador de privacidade do rodapé (
take_snapshot$\rightarrow$click). - Desmarque categorias não essenciais ou clique em "Revogar Todos" / "Salvar Preferências".
- Re-consulte
cookieStore.getAll()para verificar se cookies não essenciais previamente aceitos foram limpos ou expirados. - Chame
list_network_requestsem ações subsequentes para garantir que beacons de rastreamento não sejam mais acionados.
- Localize e clique no "Configurações de Cookie", "Gerenciar Preferências" ou no acionador de privacidade do rodapé (
- Ao auditar a retirada de consentimento ou mudanças de preferência:
- Encerrar Contexto: Chame
close_pagequando a auditoria estiver completa para evitar que cookies residuais afetem tarefas subsequentes.
3. Auditando Segurança de Cookies, SameSite e CHIPS (Cookies Particionados)
- Caminho Rápido: Problemas Nativos do DevTools (Recomendado):
- Chame
list_console_messagescom:{ "types": ["issue"], "includePreservedMessages": true } - Verifique entradas
CookieIssue, como:SameSiteNoneInsecure:SameSite=NonesemSecure.ThirdPartyCookiePhaseout: Cookie de terceiro bloqueado ou restrito.SchemefulSameSite: Problemas de cookie entre esquemas.PartitionedCookies: Atributos de particionamento CHIPS inválidos.
- Chame
- Auditoria Profunda: Lighthouse Cookies de Terceiros:
- Execute
lighthouse_auditcommode: "navigation"eoutputDirPath: "/tmp/lh-report". - Extraia a auditoria específica de cookies sem carregar o relatório completo no contexto:
node -e "const r=require('/tmp/lh-report/report.json'); const a=r.audits['third-party-cookies']; console.log(JSON.stringify({score: a?.score, displayValue: a?.displayValue, details: a?.details}))" - Analise o resultado para identificar cookies de terceiros bloqueados e oportunidades de particionamento.
- Execute