← Todas as verificações
SegurançaSeveridade típica: Baixo

Cabeçalhos de isolamento de origem

Verifica se faltam os cabeçalhos COOP e CORP que isolam o teu site contra ataques cross-origin.

O que verifica

Este scanner verifica se ao teu site faltam os cabeçalhos de isolamento de origem COOP e CORP. Deteta a ausência destes cabeçalhos que separam a tua página de outras origens no navegador.

Porque importa

Sem estes cabeçalhos, a tua página fica mais exposta a certos ataques cross-origin em que outro site tenta interagir com o teu ou ler dados que não devia. O isolamento de origem é uma camada extra de proteção que reduz esse tipo de risco.

Como se corrige

Adiciona os cabeçalhos Cross-Origin-Opener-Policy e Cross-Origin-Resource-Policy na configuração do teu servidor ou CDN. Começa com valores conservadores e confirma que os teus recursos e integrações continuam a funcionar antes de os apertar.

Como funciona esta verificação

O Scanaris verifica na resposta principal da tua página se estão presentes dois cabeçalhos: Cross-Origin-Opener-Policy (COOP) e Cross-Origin-Resource-Policy (CORP). Se faltar um ou os dois, abre um único achado de severidade baixa a indicar quais. Não avalia o valor, só a presença. São os dois cabeçalhos de isolamento de origem mais simples de adotar; o terceiro da família, Cross-Origin-Embedder-Policy, não é exigido porque parte qualquer recurso de terceiros que não coopere e raramente compensa num site normal.

O que protege cada um

O COOP decide se a tua janela partilha "grupo de contexto" com a que a abriu ou com as que tu abres. Com same-origin, uma página de outro domínio que abra a tua com window.open deixa de ter uma referência utilizável a ela (e vice-versa), o que corta ataques de manipulação entre separadores e fecha a via pela qual se exploram as fugas de memória do tipo Spectre. O CORP decide quem pode incorporar os teus recursos. Com same-origin, outro site não consegue carregar as tuas imagens, scripts ou fontes com uma etiqueta <img> ou <script> mesmo que os URL sejam públicos: o browser bloqueia a resposta antes de chegar a esse site. Nenhum dos dois corrige uma falha existente; são defesa em profundidade, e por isso a sua ausência é de severidade baixa.

Como adicioná-los

Valores recomendados para um site que não partilha recursos com outros domínios:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
  • Nuxt: em routeRules do nuxt.config, na regra '/**', junto dos outros cabeçalhos.
  • Next.js: na função headers() do next.config.js.
  • Vercel: no vercel.json, secção headers. Netlify: no _headers, sob /*.
  • nginx: duas linhas add_header ... always; no bloco server. Apache: Header always set no VirtualHost.
  • Express: o helmet() adiciona-os por defeito nas versões recentes; confirma a versão que tens instalada.

Antes de os ativar, duas verificações

  • Logins com janela pop-up. Se usas "Iniciar sessão com Google" ou outro fornecedor em modo pop-up, a janela precisa de falar com a que a abriu. Com same-origin deixa de funcionar; usa same-origin-allow-popups, que mantém a proteção e permite esse caso.
  • Recursos que serves a outros domínios. Se as tuas imagens ou fontes são carregadas a partir de outro site teu (um blog noutro domínio, um widget que terceiros incorporam), o same-origin vai bloqueá-las lá. Usa same-site se o outro site for um subdomínio, ou cross-origin nas rotas concretas desses recursos.

Confirma que está corrigido

curl -sI https://teudominio.com | grep -iE "^cross-origin-(opener|resource)-policy:"

Devem aparecer as duas linhas. Depois abre o teu site, testa o login e qualquer integração com pop-up, e vê a consola do browser: um recurso bloqueado pelo CORP aparece aí com uma mensagem explícita.

Perguntas frequentes

Isto substitui o CORS?

Não, são complementares e vão em direções opostas. O CORS abre as tuas respostas a origens concretas quando é preciso; o CORP fecha-as por defeito a quem as queira incorporar. Podes ter CORP same-origin em todo o site e CORS aberto numa rota de API.

Preciso também de Cross-Origin-Embedder-Policy?

Só se quiseres SharedArrayBuffer ou temporizadores de alta precisão (edição de vídeo, emuladores, algumas apps WebAssembly). O COEP exige que tudo o que incorporas leve CORP ou CORS, e a maioria dos scripts de terceiros não o faz. Para um site corrente, COOP e CORP chegam.

Quanto melhora a nota?

Pouco em pontos, porque é um achado de severidade baixa; mas é das poucas melhorias sem efeitos secundários se fizeres as duas verificações de cima. Os cabeçalhos que pesam mesmo estão em cabeçalhos de segurança e são explicados em cabeçalhos HTTP para humanos.

Verifica-o no teu site

Analisa o teu site grátis e vê se esta e outras 44 verificações passam, com um fix prompt por cada problema.

Analisar o meu site grátis

Do blog

Verificações relacionadas