Để giải quyết "Tại sao?" một phần, lý do tại sao các trình duyệt không thực thi Chính sách nguồn gốc giống nhau (trong đó CORS là thư giãn) cho WebSockets thay vì lệnh gọi AJAX, là vì WebSockets được giới thiệu sau khi giá trị của các yêu cầu nguồn gốc chéo được thiết lập và vì chúng ' không phải tuân theo SOP để bắt đầu, lý do lịch sử cho việc kiểm tra phía máy khách CORS không áp dụng.
Đối với AJAX, trong những ngày của Chính sách nguồn gốc chung, máy chủ không bao giờ mong đợi một trình duyệt đã xác thực gửi yêu cầu từ một miền khác 1 và do đó không cần đảm bảo yêu cầu đến từ một vị trí đáng tin cậy 2 , chỉ cần kiểm tra cookie phiên. Các thư giãn sau này như CORS phải có kiểm tra phía máy khách để tránh việc các ứng dụng hiện có bị lạm dụng do vi phạm giả định này (thực hiện một cách hiệu quả một cuộc tấn công CSRF ).
Nếu Web được phát minh ngày nay, theo như những gì chúng ta biết bây giờ, thì cả SOP và CORS đều không được yêu cầu đối với AJAX và có thể tất cả việc xác nhận sẽ được để lại cho máy chủ.
WebSockets, là một công nghệ mới hơn, được thiết kế để hỗ trợ các kịch bản miền chéo ngay từ đầu. Bất kỳ ai viết logic máy chủ nên nhận thức được khả năng xuất hiện các yêu cầu nguồn gốc chéo và thực hiện xác nhận cần thiết mà không cần các biện pháp phòng ngừa nặng nề từ phía trình duyệt à la CORS.
1 Đây là một sự đơn giản hóa. Yêu cầu GET có nguồn gốc chéo đối với tài nguyên (bao gồm các thẻ <img>, <link> và <script>) và yêu cầu POST gửi biểu mẫu luôn được cho phép như một tính năng cơ bản của Web. Ngày nay, các lệnh gọi AJAX có nguồn gốc chéo mà các yêu cầu có cùng thuộc tính cũng được cho phép và được gọi là các yêu cầu có nguồn gốc chéo đơn giản . Tuy nhiên, việc truy cập dữ liệu trả về từ các yêu cầu như vậy trong mã không được phép trừ khi được tiêu đề CORS của máy chủ cho phép rõ ràng. Ngoài ra, chính các yêu cầu POST "đơn giản" này là lý do chính tại sao mã thông báo chống CSRF lại cần thiết cho các máy chủ để tự bảo vệ mình khỏi các trang web độc hại.
2 Trên thực tế, một cách an toàn để kiểm tra nguồn yêu cầu thậm chí còn không có sẵn vì Referer
tiêu đề có thể bị giả mạo, ví dụ như sử dụng lỗ hổng chuyển hướng mở. Điều này cũng cho thấy các lỗ hổng CSRF được hiểu kém như thế nào vào thời điểm đó.