Segurança de Navegador e Web Platform
O navegador moderno possui diversas camadas de segurança nativas. Entender como elas funcionam é essencial para não as desativar ou contornar indevidamente.
1. Same-Origin Policy (SOP)
A Política de Mesma Origem é o pilar da segurança web. Ela impede que um script em um site acesse dados de outro site, a menos que as origens (protocolo, domínio e porta) sejam idênticas.
2. CORS (Cross-Origin Resource Sharing)
O CORS é um mecanismo que permite que os servidores relaxem a SOP para domínios específicos.
✅ Como fazer
- No backend, configure o
Access-Control-Allow-Originapenas para os domínios da empresa. - Entenda o fluxo de Preflight requests (requisições
OPTIONS) feitas pelo navegador.
❌ Como não fazer
- Jamais use
Access-Control-Allow-Origin: *em APIs que lidam com dados sensíveis ou autenticação.
3. HTTPS / TLS
O protocolo HTTPS garante a integridade e a confidencialidade dos dados entre o cliente e o servidor.
Mixed Content
Ocorre quando um site HTTPS carrega recursos (imagens, scripts) via HTTP. O navegador bloqueia ou exibe avisos graves, pois esses recursos podem ter sido alterados no caminho.
4. Browser Sandbox
Os navegadores executam abas e processos em um ambiente isolado (sandbox) para impedir que um site malicioso acesse o sistema de arquivos ou processos do computador do usuário.
5. Iframes e Riscos de Embed
Incorporar sites via iframe pode expor a aplicação a ataques de Clickjacking ou permitir que o site embedado tente navegar o site pai.
✅ Como fazer
- Use o atributo
sandboxem iframes:<iframe sandbox="allow-scripts allow-forms" ...>.
6. Referrer Policy
Controla quanta informação de referência (a URL de onde o usuário veio) é enviada nas requisições.
✅ Como fazer
- Use
Referrer-Policy: strict-origin-when-cross-originpara evitar vazamento de dados sensíveis presentes em URLs (como tokens).
7. Window.postMessage
Permite a comunicação segura entre diferentes janelas ou iframes.
✅ Como fazer
- Sempre valide a origem da mensagem:
window.addEventListener("message", (event) => {
if (event.origin !== "https://trusted-site.com") return;
// processar mensagem
}, false);- Sempre especifique o
targetOriginao enviar mensagens:otherWindow.postMessage(message, "https://target-site.com").
❌ Como não fazer
- Não use
*comotargetOriginao enviar dados sensíveis. - Não processe mensagens sem validar o
event.origin.