Tài nguyên trên nhiều nguồn gốc do các bên thứ ba phân phát thường không có đầy đủ các tiêu đề CORP. Nếu có thể yêu cầu chúng mà không cần thông tin xác thực, thì giờ đây, bạn có thể bật tính năng tách biệt nhiều nguồn gốc bằng cách đánh dấu chúng.
Chúng tôi đã chuyển giá trị credentialless
của Chính sách tài nguyên nhúng trên nhiều nguồn gốc (COEP) mới. Giá trị này cho phép trình duyệt tải các tài nguyên trên nhiều nguồn gốc không sử dụng Chính sách tài nguyên trên nhiều nguồn gốc (CORP), bằng cách gửi yêu cầu mà không cần thông tin xác thực, chẳng hạn như cookie. Điều này giúp nhà phát triển sử dụng tính năng tách biệt nhiều nguồn gốc dễ dàng hơn.
Lý do chúng ta cần tách biệt nhiều nguồn gốc
Một số API web làm tăng nguy cơ bị tấn công kênh bên, chẳng hạn như Spectre. Để giảm thiểu rủi ro đó, các trình duyệt cung cấp một môi trường tách biệt dựa trên lựa chọn tham gia có tên là cách ly nhiều nguồn gốc. Khi ở trạng thái tách biệt nhiều nguồn gốc, trang web có thể sử dụng các tính năng đặc quyền bao gồm SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
và đồng hồ hẹn giờ có độ chính xác cao với độ phân giải cao hơn, đồng thời tách biệt nguồn gốc với các tính năng khác trừ phi bạn chọn sử dụng.
Trang web phải gửi hai tiêu đề HTTP để bật tính năng tách biệt nhiều nguồn gốc:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Khi ở trạng thái tách biệt nhiều nguồn gốc, tất cả tài nguyên trên nhiều nguồn gốc phải được phân phát bằng CORS hoặc đặt tiêu đề Cross-Origin-Resource-Policy
để được tải.
Những thách thức khi bật tính năng tách biệt nhiều nguồn gốc
Mặc dù việc tách biệt nhiều nguồn gốc mang lại cho trang web khả năng bảo mật tốt hơn và khả năng hỗ trợ các tính năng mạnh mẽ, nhưng việc triển khai tính năng này có thể khó. Một trong những thách thức lớn nhất là yêu cầu phải bật CORS hoặc CORP cho tất cả tài nguyên nhiều nguồn gốc. Trình duyệt sẽ không tải các tài nguyên không có những tiêu đề đó trên một trang được tách biệt nhiều nguồn gốc.
Các tài nguyên nhiều nguồn gốc này thường do các bên thứ ba phân phát. Họ có thể không dễ dàng thêm các tiêu đề cần thiết.
Nhưng nếu chúng ta biết tài nguyên đủ an toàn để tải thì sao? Trên thực tế, tài nguyên duy nhất gặp rủi ro là những tài nguyên được yêu cầu có thông tin xác thực, vì các tài nguyên đó có thể chứa thông tin nhạy cảm mà kẻ tấn công không thể tự tải. Tức là các tài nguyên có thể được yêu cầu mà không cần thông tin xác thực sẽ có sẵn công khai và an toàn để tải.
credentialless
đến nơi giải cứu
Đây là lúc COEP: credentialless
phát huy tác dụng. credentialless
là một giá trị mới cho tiêu đề Cross-Origin-Embedder-Policy
. Tương tự như require-corp
, tệp này có thể bật tính năng tách biệt nhiều nguồn gốc, nhưng thay vì đòi hỏi tiêu đề CORP:cross-origin
cho các yêu cầu không có nguồn gốc, các yêu cầu này được gửi mà không cần thông tin xác thực (ví dụ: cookie).
Bạn có thể bật tính năng tách biệt nhiều nguồn gốc bằng hai tiêu đề sau:
Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin
Điều này có nghĩa là máy chủ nhiều nguồn gốc được yêu cầu sẽ không thể phản hồi bằng một tài nguyên nhạy cảm và người yêu cầu luôn có thể giả định rằng phản hồi chỉ chứa thông tin có sẵn công khai.
Việc này cũng phù hợp với kế hoạch loại bỏ cookie của bên thứ ba của trình duyệt.
Bản minh hoạ
Bạn có thể thử nhiều lựa chọn tiêu đề trong bản minh hoạ này: https://cross-origin-isolation.glitch.me
Câu hỏi thường gặp
Tôi có thể gửi yêu cầu được xác thực trong môi trường credentialless
không?
Tuyệt đối, với cái giá là phải thay đổi chế độ của yêu cầu để yêu cầu kiểm tra CORS đối với phản hồi. Đối với các thẻ HTML như <audio>
, <img>
, <link>
, <script>
và <video>
, bạn chỉ cần thêm crossorigin="use-credentials"
một cách rõ ràng để thông báo cho trình duyệt biết cần gửi các yêu cầu đã được xác thực.
Ví dụ: ngay cả khi tài liệu trên https://www.example.com
có tiêu đề Cross-Origin-Embedder-Policy: credentialless
, <img
src="https://images.example.com/avatar.png" crossorigin="use-credentials">
vẫn sẽ gửi yêu cầu đã được xác thực.
Đối với API fetch()
, bạn có thể sử dụng request.mode = 'cors'
.
Nếu cung cấp COEP: credentialless
, COEP: require-corp
vẫn hữu ích như thế nào cho trang web của tôi?
COEP: require-corp
không đòi hỏi bạn phải chuyển chế độ yêu cầu sang ChromeOS theo cách thủ công nếu cần cookie cho một số tài nguyên phụ trên nhiều nguồn gốc.
Tôi có thể tải các iframe nhiều nguồn gốc mà không cần tiêu đề đặc biệt trong môi trường credentialless
không?
Không. Việc tải các iframe nhiều nguồn gốc trong môi trường credentialless
vẫn yêu cầu các điều kiện tương tự như require-corp
. Tài liệu iframe cần được phân phát với 2 tiêu đề:
Cross-Origin-Embedder-Policy: credentialless
(hoặcrequire-corp
)Cross-Origin-Resource-Policy: cross-origin
Tin vui là hiện có một cuộc thảo luận liên tục về việc cho phép tải các iframe nhiều nguồn gốc mà không cần các tiêu đề đó bằng cách cung cấp các iframe crossorigin="anonymous"
.
Việc này sẽ cho phép tải các iframe nhiều nguồn gốc mà không cần tiêu đề nhưng không cần thông tin xác thực.
Các trình duyệt khác có áp dụng tính năng này không?
- Vấn đề theo dõi trong Firefox
- Yêu cầu về vị trí trong Webkit: Không có tín hiệu
- TAG W3C Yêu cầu vị trí: Đang chờ xử lý
Nội dung sắp tới
Chúng tôi sẽ chia sẻ thêm hai nội dung cập nhật sau đây để giảm thiểu những thách thức khác liên quan đến việc tách biệt nhiều nguồn gốc:
Những người đã đăng ký bản dùng thử theo nguyên gốc Chrome để gia hạn thay đổi cho SharedArrayBuffer do những trở ngại nêu trên có thể muốn biết khi nào gói dùng thử sẽ bị chấm dứt. Ban đầu, chúng tôi thông báo rằng dịch vụ này sẽ bị chấm dứt trong Chrome 96, nhưng chúng tôi đã quyết định hoãn lại việc này đối với Chrome 106.
Tài nguyên
- Đảm bảo trang web "bị tách biệt nhiều nguồn gốc" bằng COOP và COEP
- Lý do bạn cần chế độ "được tách biệt trên nhiều nguồn gốc" để có các tính năng mạnh mẽ
- Hướng dẫn bật tính năng tách biệt nhiều nguồn gốc
- Bản cập nhật SharedArrayBuffer trong Android Chrome 88 và Chrome 92 dành cho máy tính
Ảnh chụp của Martin Adams trên Unsplash