Các nhà phát triển sử dụng COEP hiện có thể nhúng các iframe của bên thứ ba không tự sử dụng COEP.
Lý do chúng ta cần COEP
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 có tên là cách ly nhiều nguồn gốc. Cùng với một số yếu tố khác, hệ thống sẽ yêu cầu triển khai COEP. Điều này cho phép các trang web 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.
Để bật tính năng tách biệt nhiều nguồn gốc, các trang web phải gửi 2 tiêu đề HTTP sau đây:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Những thách thức khi bật COEP
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 COEP có thể là khó. Một trong những thách thức lớn nhất là tất cả các iframe trên nhiều nguồn gốc cũng phải triển khai COEP và CORP. Những iframe không có các tiêu đề đó sẽ không được trình duyệt tải.
Các iframe thường được phân phát bởi một bên thứ ba có thể không dễ dàng triển khai COEP.
iframe ẩn danh để giải cứu
Đó là lúc iframe ẩn danh xuất hiện. Bằng cách thêm thuộc tính anonymous
vào phần tử <iframe>
, iframe này sẽ được tải từ một phân vùng bộ nhớ tạm thời khác và không còn phải tuân theo các quy định hạn chế về COEP nữa.
Ví dụ:
<iframe anonymous src="https://example.com">
Iframe được tạo trong ngữ cảnh tạm thời mới và không có quyền truy cập vào bất kỳ
cookie nào được liên kết với trang web cấp cao nhất. Nó bắt đầu từ một lọ bánh quy trống. Tương tự, các API lưu trữ như LocalStorage
, CacheStorage
, IndexedDB
và các API khác sẽ tải và lưu trữ dữ liệu trong phân vùng tạm thời mới. Phân vùng này nằm trong phạm vi tài liệu cấp cao nhất hiện tại và nguồn gốc của iframe. Bộ nhớ
sẽ bị xoá sau khi tài liệu cấp cao nhất được huỷ tải.
iframe ẩn danh không phải tuân theo quy tắc nhúng COEP. Việc này vẫn an toàn vì chúng luôn được tải từ một ngữ cảnh trống mới. Các tài sản này sẽ được tải mà không cá nhân hoá dữ liệu của chúng. Chúng chỉ chứa dữ liệu công khai và không có giá trị đối với kẻ tấn công.
Bản minh hoạ
Bạn có thể xem iframe ẩn danh tại: https://anonymous-iframe.glitch.me/
Đăng ký bản dùng thử theo nguyên gốc
Để đảm bảo rằng iframe ẩn danh đang giúp các nhà phát triển áp dụng cách ly nhiều nguồn gốc, chúng tôi sẽ cung cấp iframe ẩn danh trong Chrome từ phiên bản 106 đến 108 dưới dạng bản dùng thử nguồn gốc.
Đăng ký bản dùng thử theo nguyên gốc để cho phép trang web của bạn sử dụng iframe ẩn danh:
- Yêu cầu mã thông báo cho nguồn gốc của bạn.
- Sử dụng mã thông báo theo một trong những cách sau:
- Trong HTML của bạn:
html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
- Trong JavaScript:
js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
- Trong tiêu đề HTTP:
text Origin-Trial: TOKEN_GOES_HERE
- Trong HTML của bạn:
- Thêm một iframe ẩn danh vào trang của bạn:
html <iframe anonymous src="https://example.com">
Nếu bạn có ý kiến phản hồi về tính năng này, hãy báo cáo vấn đề trong kho lưu trữ GitHub.
Bản dùng thử theo nguyên gốc của bên thứ ba
Bản dùng thử theo nguyên gốc cũng được cung cấp cho các tập lệnh của bên thứ ba. Điều này có nghĩa là các tập lệnh được nhúng trên trang có thể bật tính năng này.
Tìm hiểu thêm về cách đăng ký bản dùng thử theo nguyên gốc của bên thứ ba.
Câu hỏi thường gặp
Các trình duyệt khác có áp dụng tính năng này không?
- Yêu cầu của Mozilla cho vị trí: Đang chờ xử lý
- Yêu cầu về vị trí trong Webkit: Không có tín hiệu
- W3C TAG Yêu cầu vị trí: đã hài lòng
Các iframe được lồng trong <iframe anonymous>
có ẩn danh không?
Có. Tên này được kế thừa. Khi một iframe ở chế độ ẩn danh, iframe này sẽ áp dụng cho tất cả các iframe trong toàn bộ cây con ngay cả khi không có thuộc tính anonymous
.
Các cửa sổ bật lên được tạo từ <iframe anonymous>
có ẩn danh không?
Cửa sổ bật lên sẽ mở ra như thể bạn đã đặt noopener
. Chúng được tạo từ một ngữ cảnh cấp cao nhất thông thường mới và không ẩn danh. Chúng không thể giao tiếp với iframe ẩn danh.
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
- Tải tài nguyên nhiều nguồn gốc mà không cần tiêu đề CORP bằng
COEP: credentialless