Esta pergunta é sobre a proteção apenas contra ataques de Cross Site Request Forgery.
É especificamente sobre: A proteção por meio do cabeçalho de origem (CORS) é tão boa quanto a proteção por meio de um token CSRF?
Exemplo:
- Alice está logada (usando um cookie) com seu navegador em " https://example.com ". Presumo que ela use um navegador moderno.
- Alice visita " https://evil.com ", e o código do lado do cliente do evil.com realiza algum tipo de solicitação para " https://example.com " (cenário CSRF clássico).
Assim:
- Se não verificarmos o cabeçalho Origin (lado do servidor) e nenhum token CSRF, temos uma falha de segurança CSRF.
- Se verificarmos um token CSRF, estamos seguros (mas é um pouco tedioso).
- Se verificarmos o cabeçalho Origin, a solicitação do código do lado do cliente do evil.com deve ser bloqueada da mesma forma que seria ao usar um token CSRF - exceto se for possível de alguma forma para o código do evil.com definir o cabeçalho Origin.
Eu sei que isso não deveria ser possível com XHR (veja, por exemplo, Segurança para compartilhamento de recursos de origem cruzada ), pelo menos não, se confiarmos que a especificação W3C será implementada corretamente em todos os navegadores modernos (podemos?)
Mas e quanto a outros tipos de solicitações - por exemplo, envio de formulário? Carregando uma tag script / img / ...? Ou qualquer outra maneira que uma página possa usar para (legalmente) criar uma solicitação? Ou talvez algum hack JS conhecido?
Nota: não estou falando sobre
- aplicativos nativos,
- navegadores manipulados,
- erros de cross site scripting na página de example.com,
- ...
fonte
Origin
? Isso anularia a proteção CORS.Respostas:
No final do dia, você deve "confiar" no navegador do cliente para armazenar com segurança os dados do usuário e proteger o lado do cliente da sessão. Se você não confia no navegador do cliente, deve parar de usar a web para qualquer coisa que não seja conteúdo estático. Mesmo com o uso de tokens CSRF, você está confiando no navegador do cliente para obedecer corretamente à política da mesma origem .
Embora tenha havido vulnerabilidades de navegador anteriores, como aquelas no IE 5.5 / 6.0, onde era possível para os invasores contornar a política da mesma origem e executar ataques, você normalmente pode esperar que eles sejam corrigidos assim que descobertos e com a maioria dos navegadores sendo atualizados automaticamente , este risco será principalmente mitigado.
O
Origin
cabeçalho é normalmente enviado apenas para solicitações XHR entre domínios. Os pedidos de imagem não contêm o cabeçalho.Não tenho certeza se isso cai em navegadores manipulados ou não, mas as versões antigas do Flash permitiam a configuração de cabeçalhos arbitrários que permitiriam a um invasor enviar uma solicitação com um
referer
cabeçalho falsificado da máquina da vítima para executar um ataque.fonte
crossdomain.xml
que pode permitir a comunicação entre domínios.O conteúdo da web não pode interferir no cabeçalho Origin. Além disso, sob a mesma política de origem, uma origem não pode nem mesmo enviar cabeçalhos personalizados para outras origens. [1]
Portanto, verificar o cabeçalho Origin é tão bom para bloquear ataques quanto usar um token CSRF.
A principal preocupação em confiar é se isso permite que todas as solicitações legítimas funcionem. O autor da pergunta sabe sobre esse problema e configurou a questão para descartar os casos principais (sem navegadores antigos, apenas HTTPS).
Os fornecedores de navegadores seguem essas regras, mas e os plug-ins? Talvez não, mas a questão desconsidera "navegadores manipulados". E quanto aos bugs no navegador que permitem que um invasor falsifique o cabeçalho Origin? Pode haver bugs que permitem que o token CSRF vaze entre as origens também, então seria mais trabalhoso argumentar que um é melhor do que o outro.
fonte