Sau khi đọc về CORS, tôi không hiểu nó cải thiện bảo mật như thế nào.
CORS không cải thiện bảo mật. CORS cung cấp một cơ chế để máy chủ thông báo cho các trình duyệt biết cách chúng nên được các miền nước ngoài truy cập và nó cố gắng làm như vậy theo cách phù hợp với mô hình bảo mật của trình duyệt đã tồn tại trước CORS (cụ thể là Chính sách nguồn gốc giống nhau ).
Nhưng Chính sách Xuất xứ Giống nhau và CORS có một phạm vi hạn chế. Cụ thể, bản thân đặc tả CORS không có cơ chế từ chối yêu cầu. Nó có thể sử dụng tiêu đề để yêu cầu trình duyệt không cho phép một trang từ miền nước ngoài đọc phản hồi. Và, trong trường hợp yêu cầu trước khi bay, nó có thể yêu cầu trình duyệt không gửi cho nó một số yêu cầu nhất định từ miền nước ngoài. Nhưng CORS không chỉ định bất kỳ phương tiện nào để máy chủ từ chối (nghĩa là không thực thi) một yêu cầu thực tế.
Hãy lấy một ví dụ. Một người dùng đã đăng nhập vào trang web A
thông qua cookie. Người dùng tải trang web độc hại M
, trang này cố gắng gửi một biểu mẫu tương POST
ứng với A
. Chuyện gì sẽ xảy ra? Vâng, có hoặc không có CORS, và có hoặc không M
là miền được phép, trình duyệt sẽ gửi yêu cầu đến A
cùng với cookie ủy quyền của người dùng và máy chủ sẽ thực thi mã độc hại POST
như thể người dùng đã khởi tạo nó.
Cuộc tấn công này được gọi là Cross-Site Request Forgery và bản thân CORS không làm gì để giảm thiểu nó. Đó là lý do tại sao các biện pháp bảo vệ CSRF rất quan trọng nếu bạn cho phép người dùng yêu cầu thay đổi dữ liệu.
Bây giờ, việc sử dụng Origin
tiêu đề có thể là một phần quan trọng trong việc bảo vệ CSRF của bạn. Thật vậy, việc kiểm tra nó là một phần của khuyến nghị hiện tại về phòng thủ CSRF đa hướng . Nhưng việc sử dụng Origin
tiêu đề đó nằm ngoài thông số kỹ thuật CORS.
Tóm lại, CORS là một đặc tả hữu ích để mở rộng mô hình bảo mật Chính sách nguồn gốc hiện có cho các miền được chấp nhận khác. Nó không tăng cường bảo mật và các trang web cần các loại cơ chế bảo vệ giống như chúng đã làm trước CORS.