이 질문은 Cross Site Request Forgery 공격으로부터 만 보호하는 것에 관한 것입니다.
구체적으로 다음과 같습니다. Origin 헤더 (CORS)를 통한 보호가 CSRF 토큰을 통한 보호만큼 좋은가요?
예:
- Alice는 브라우저에서 " https://example.com "에 로그인 (쿠키 사용) 합니다. 나는 그녀가 최신 브라우저를 사용한다고 가정합니다.
- Alice는 " https://evil.com "을 방문 하고 evil.com의 클라이언트 측 코드는 " https://example.com "에 대한 일종의 요청을 수행합니다 (고전적인 CSRF 시나리오).
그래서:
- Origin 헤더 (서버 측)를 확인하지 않고 CSRF 토큰이없는 경우 CSRF 보안 허점이있는 것입니다.
- CSRF 토큰을 확인하면 안전합니다 (하지만 약간 지루합니다).
- Origin 헤더를 확인하는 경우, evil.com의 코드가 Origin 헤더를 설정할 수있는 경우를 제외하고는, CSRF 토큰을 사용할 때와 마찬가지로 evil.com의 클라이언트 측 코드의 요청도 차단되어야합니다.
나는 이것이 XHR (예 : 교차 출처 리소스 공유를위한 보안 참조)에서는 가능하지 않아야한다는 것을 알고 있습니다 . 적어도 우리가 W3C 사양이 모든 최신 브라우저에서 올바르게 구현 될 것이라고 믿는다면 (그럴 수 있습니까?)
그러나 다른 종류의 요청 (예 : 양식 제출)은 어떻습니까? 스크립트 / img / ... 태그를로드 하시겠습니까? 아니면 페이지가 (합법적으로) 요청을 만드는 데 사용할 수있는 다른 방법이 있습니까? 아니면 알려진 JS 해킹?
참고 : 나는
- 기본 애플리케이션,
- 조작 된 브라우저,
- example.com 페이지의 교차 사이트 스크립팅 버그,
- ...
Origin
할까요? 이는 CORS 보호를 무효화합니다.