Proteção CSRF com cabeçalho CORS Origin vs. token CSRF

Esta pergunta é sobre como proteger apenas contra ataques de falsificação de solicitação entre sites.

É especificamente sobre: A proteção através do cabeçalho de origem (CORS) é tão boa quanto a proteção através de um token CSRF?

Exemplo:

Alice está conectada (usando um cookie) com seu navegador para "https://example.com". Suponho que ela use um navegador moderno.Alice visita "https://evil.com", e o código do cliente do evil.com realiza algum tipo de solicitação para"https://example.com"(cenário clássico de CSRF).

Assim:

Se não verificarmos o cabeçalho Origin (lado do servidor) e nenhum token CSRF, temos uma falha de segurança no CSRF.Se verificarmos um token CSRF, estaremos 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 maneira que faria ao usar um token CSRF - exceto se for possível, de alguma forma, que o código do evil.com defina o cabeçalho Origin.

Sei que isso não deve ser possível com o XHR (veja, por exemplo,Segurança para compartilhamento de recursos de origem), pelo menos não, se confiarmos que a especificação do W3C será implementada corretamente em todos os navegadores modernos (podemos?)

Mas e quanto a outros tipos de solicitações, por exemplo enviar 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 conhecido JS hackear?

Nota: eu não estou falando sobre

aplicativos nativos,navegadores manipulados,erros de script entre sites na página de example.com,...

questionAnswers(2)

yourAnswerToTheQuestion