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,
- ...
Origin
? Isso anularia a proteção CORS.