Apenas um resumo humilde:
P: A mesma política de origem (SOP) é aplicada apenas pelos navegadores?
A: sim Para todas as chamadas feitas dentro de um navegador, o SOP é definitivamente aplicado pelo navegador. O servidor pode ou não verificar a origem da solicitação.
P: Se uma solicitação não estiver em conformidade com o SOP, o navegador a bloqueia?
R: Não, está além da autoridade dos navegadores. Os navegadores apenas enviam solicitações de origem cruzada e aguardam a resposta para ver se a chamada é sinalizada como legítima pelo servidor através de Access-Control
- * cabeçalhos. Se o servidor não enviar de volta o Access-Control-Allow-Origin
cabeçalho, não repetir a origem do chamador ou não enviar de volta *
no cabeçalho, tudo o que o navegador fará será abster-se de fornecer a resposta ao chamador.
P: Isso significa que não posso falsificar Origin
?
R: No navegador e usando scripts, você não pode substituir Origin
, pois está no controle do navegador. No entanto, se você quiser se hackear, poderá violar as chamadas que saem do SEU navegador usando extensões do navegador ou outras ferramentas instaladas em sua máquina. Você também pode emitir HTTP
chamadas usando curl
, Python
, C#
, etc e alterar o Origin
cabeçalho para servidores truque.
P: Então, se eu posso enganar o servidor alterando Origin
, isso significa que CORS
não é seguro?
R: CORS
por si só é silencioso sobre segurança - isto é, autenticação e autorização de solicitações. Cabe aos servidores inspecionar solicitações e autenticar / autorizá-las por qualquer mecanismo com que trabalhem, como cookies e cabeçalhos. Dito isto, pode nos proteger um pouco mais em caso de ataques como o XSS:
Exemplo:
digamos que você fez login no seu site e um script malicioso tenta enviar uma solicitação ao site do seu banco para obter informações sobre seu saldo: um ataque XSS refletido . O site do seu banco confia nas credenciais provenientes (aqui em nome do) do site, para que a solicitação seja autenticada e HTTP
seja emitida uma resposta visando o código malicioso. Se o site do seu banco não se importar em compartilhar seus pontos de extremidade com outras origens, ele não incluiAccess-Control-Allow-Origin
cabeçalho na resposta. Agora, após a chegada da solicitação, o navegador percebe que a solicitação era entre origens, mas a resposta não mostra que o servidor estava feliz em compartilhar o recurso (aqui o ponto de extremidade da consulta de saldo) com seu site. Portanto, ele interrompe o fluxo, portanto, o resultado retornado nunca alcançará o código malicioso.
foo.com
) precisa fornecer oAccess-Control-Allow-Origin
cabeçalho ou o navegador não permite a solicitaçãobar.com
.