Política de Mesma Origem (Same-Origin Policy)
Definição
A Política de Mesma Origem (Same-Origin Policy) é uma regra de segurança implementada pelos navegadores que restringe a interação entre páginas e recursos carregados de origens diferentes.
Ela impede que scripts executados em uma página web possam acessar ou manipular dados de outra página se as duas não tiverem a mesma origem — isto é, o mesmo protocolo, host e porta.
Essa política é um dos principais mecanismos de defesa do navegador contra ataques como XSS (Cross-Site Scripting) e CSRF (Cross-Site Request Forgery).
Origem = protocolo + domínio + porta
Ex:https://programicio.com:443
Objetivos da Same-Origin Policy
- Proteger dados sensíveis do usuário contra acesso indevido.
- Isolar contextos de execução de scripts entre sites diferentes.
- Impedir que páginas maliciosas leiam ou modifiquem dados de outras aplicações.
- Reduzir a superfície de ataques baseados em navegador, como roubo de sessões.
Exemplo prático — Acesso bloqueado entre origens
Considere o seguinte código:
// Página hospedada em https://app1.exemplo.com
const conteudo = document.getElementById("iframe-externo").contentWindow.document;
Se o iframe estiver carregando uma página de https://app2.exemplo.com
, o navegador bloqueará o acesso com um erro semelhante a:
Blocked a frame with origin "https://app1.exemplo.com" from accessing a cross-origin frame.
Isso ocorre porque, embora compartilhem o domínio base, app1.exemplo.com
e app2.exemplo.com
são origens diferentes por serem subdomínios distintos.
O ciclo da Same-Origin Policy
[Usuário acessa um site]
↓
[Scripts são carregados de uma origem específica]
↓
[Scripts tentam acessar dados de outra origem]
↓
[Navegador verifica a origem e bloqueia a interação se forem diferentes]
Essa política afeta principalmente:
Acesso ao DOM de iframes de outros domínios
Leitura de respostas de
fetch
ouXMLHttpRequest
Compartilhamento de cookies e
localStorage
Requisições AJAX entre domínios diferentes
Quando é necessário compartilhar dados entre origens diferentes de forma controlada, utiliza-se CORS (Cross-Origin Resource Sharing), que define permissões explícitas entre domínios.