Cấu hình Cross-Origin Resource Sharing (CORS)
Cross-Origin Resource Sharing (CORS) được xử lý bằng Access-Control-Allow-Origin và các header liên quan. Access-Control-Allow-Origin xác định các origin khác-origin được phép gửi yêu cầu tới các trang trên miền của bạn, tức là qua XMLHttpRequest hoặc fetch().
Vấn đề
Theo mặc định, chính sách cùng nguồn gốc chặn các yêu cầu HTTP khác origin do script khởi tạo. Có nhiều trường hợp sử dụng cần quyền truy cập script khác origin; ví dụ như các Mạng phân phối nội dung (CDN) cung cấp lưu trữ cho thư viện JavaScript/CSS và các endpoint API công khai. Tuy nhiên, quyền truy cập khác origin tạo ra rủi ro bảo mật lớn và phải được kiểm soát cẩn thận.
Giải pháp
Sử dụng Access-Control-Allow-Origin để xác định các origin khác-origin được phép gửi yêu cầu tới các trang trên miền của bạn.
Nếu có mặt, Access-Control-Allow-Origin nên chỉ định số lượng origin và tài nguyên tối thiểu cần thiết để website của bạn hoạt động. Ví dụ, nếu máy chủ của bạn vừa cung cấp một website vừa cung cấp API dành cho quyền truy cập XMLHttpRequest từ xa, chỉ các tài nguyên API mới nên trả về header Access-Control-Allow-Origin.
Không đặt Access-Control-Allow-Origin đúng cách sẽ cho phép các origin trái phép đọc nội dung của bất kỳ trang nào trên website của bạn. Điều này đặc biệt nguy hiểm nếu các website đó có thể gửi thông tin xác thực, vì khi đó website của bạn có thể bị phơi bày trước các cuộc tấn công CSRF.
Nếu cần quyền truy cập có thông tin xác thực từ các origin cụ thể, hãy đảm bảo Access-Control-Allow-Origin chỉ được đặt thành các origin đó, thay vì phản chiếu header Origin. Nếu cần quyền truy cập công khai không có thông tin xác thực, hãy đặt Access-Control-Allow-Origin thành * và bỏ qua header Access-Control-Allow-Credentials. Nếu không, hãy bỏ cả hai header.
Ví dụ
Cho phép mọi website đọc nội dung của một thư viện JavaScript:
Access-Control-Allow-Origin: *
Note: Thiết lập này là bắt buộc để Subresource integrity hoạt động.
Cho phép https://random-dashboard.example.org đọc kết quả trả về của một API:
Access-Control-Allow-Origin: https://random-dashboard.example.org
Xem thêm
Access-Control-Allow-OriginAccess-Control-Allow-CredentialsAccess-Control-Allow-HeadersAccess-Control-Allow-MethodsAccess-Control-Expose-HeadersAccess-Control-Max-AgeAccess-Control-Request-HeadersAccess-Control-Request-MethodOrigin- Cross-Origin Resource Sharing (CORS)
- CORS for Developers từ W3C (2016)