Câu hỏi này chỉ là về việc bảo vệ chống lại các cuộc tấn công Cross Site Request Forgery.
Đặc biệt là về: Bảo vệ thông qua tiêu đề Nguồn gốc (CORS) có tốt như bảo vệ thông qua mã thông báo CSRF không?
Thí dụ:
- Alice đã đăng nhập (sử dụng cookie) bằng trình duyệt của mình vào " https://example.com ". Tôi giả định rằng cô ấy sử dụng một trình duyệt hiện đại.
- Alice truy cập " https://evil.com " và mã phía máy khách của evil.com thực hiện một số loại yêu cầu đối với " https://example.com " (kịch bản CSRF cổ điển).
Vì thế:
- Nếu chúng tôi không kiểm tra tiêu đề Nguồn gốc (phía máy chủ) và không có mã thông báo CSRF, chúng tôi có lỗ hổng bảo mật CSRF.
- Nếu chúng tôi kiểm tra mã thông báo CSRF, chúng tôi an toàn (nhưng nó hơi tẻ nhạt).
- Nếu chúng tôi kiểm tra tiêu đề Nguồn gốc, yêu cầu từ mã phía máy khách của evil.com cũng sẽ bị chặn giống như khi sử dụng mã thông báo CSRF - ngoại trừ, nếu có thể bằng cách nào đó mã của evil.com đặt tiêu đề Nguồn gốc.
Tôi biết, điều này sẽ không thể xảy ra với XHR (xem ví dụ: Bảo mật để chia sẻ tài nguyên nguồn gốc chéo ), ít nhất là không, nếu chúng tôi tin tưởng rằng thông số W3C được triển khai chính xác trong tất cả các trình duyệt hiện đại (có thể không?)
Nhưng những loại yêu cầu khác - ví dụ như gửi biểu mẫu thì sao? Đang tải thẻ script / img / ...? Hoặc bất kỳ cách nào khác mà một trang có thể sử dụng để (hợp pháp) tạo yêu cầu? Hoặc có thể một số hack JS đã biết?
Lưu ý: Tôi không nói về
- ứng dụng gốc,
- trình duyệt bị thao túng,
- lỗi kịch bản trang chéo trong trang example.com,
- ...
Origin
? Điều đó sẽ phủ nhận bảo vệ CORS.