Giờ đây, nhà phát triển sử dụng COEP có thể nhúng 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 như Spectre. Để giảm thiểu rủi ro đó, 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 sử dụng có tên là tách biệt nhiều nguồn gốc. Ngoài ra, môi trường này 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 cả SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
và đồng hồ hẹn giờ có độ chính xác cao với độ phân giải tốt hơn.
Để bật tính năng tách biệt trên nhiều nguồn gốc, trang web phải gửi hai tiêu đề HTTP sau:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Thách thức khi áp dụng COEP
Mặc dù tính năng tách biệt nhiều nguồn gốc mang lại khả năng bảo mật tốt hơn cho trang web và khả năng bật các tính năng mạnh mẽ, nhưng việc triển khai COEP có thể khó. Một trong những thách thức lớn nhất là tất cả iframe trên nhiều nguồn gốc cũng phải triển khai COEP và CORP. Trình duyệt sẽ không tải các iframe không có các tiêu đề đó.
Các iframe thường do bên thứ ba phân phát và họ có thể không dễ dàng triển khai COEP.
Giải pháp iframe ẩn danh
Đó 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 sẽ được tải từ một phân vùng bộ nhớ tạm thời khác và không còn chịu các quy định hạn chế của COEP nữa.
Ví dụ:
<iframe anonymous src="https://example.com">
Iframe được tạo trong một 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 liên kết với trang web cấp cao nhất. Quá trình này bắt đầu từ một tệp cookie trống. Tương tự, các API bộ nhớ như LocalStorage
, CacheStorage
, IndexedDB
, v.v. đang 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 thuộc phạm vi của tài liệu cấp cao nhất hiện tại và nguồn gốc của iframe. Bộ nhớ sẽ được xoá sau khi tải xuống tài liệu cấp cao nhất.
Iframe ẩn danh không phải tuân theo quy tắc nhúng của COEP. Điều này vẫn an toàn vì các tệp này được tải từ một ngữ cảnh trống mới mỗi khi cần. Các tệp này sẽ được tải mà không cá nhân hoá dữ liệu của chúng. Các tệp này 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ý dùng thử theo nguyên gốc
Để đảm bảo rằng các iframe ẩn danh đang giúp nhà phát triển áp dụng tính năng tách biệt nguồn gốc, chúng tôi sẽ cung cấp các iframe này 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:
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:
- 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 gửi 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 áp dụng cho tập lệnh bên thứ ba. Tức là bạn có thể bật tính năng này bằng các tập lệnh được nhúng trên trang.
Tìm hiểu thêm về cách đăng ký dùng thử nguồ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 về vị trí: Đang chờ xử lý
- Yêu cầu Webkit về vị trí: Không có tín hiệu
- THẺ W3C Yêu cầu cho vị trí: hài lòng
Các iframe lồng trong <iframe anonymous>
có ẩn danh không?
Có. Thuộc tính này được kế thừa. Sau khi một iframe trở thành ẩn danh, điều đó 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ửa sổ bật lên được tạo từ <iframe anonymous>
cũng ẩn danh không?
Cửa sổ bật lên sẽ mở ra như thể noopener
đã được đặt. Các giá trị này được tạo từ một ngữ cảnh cấp cao nhất mới và không ẩn danh. Các thành phần này không thể giao tiếp với khung ẩn danh.
Tài nguyên
- Tạo "trạng thái tách biệt nhiều nguồn gốc" cho trang web bằng COOP và COEP
- Lý do bạn cần "tách riêng 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
- Nội dung cập nhật SharedArrayBuffer trong Chrome 88 dành cho Android và Chrome 92 dành cho máy tính
- Tải tài nguyên trên nhiều nguồn gốc mà không cần tiêu đề CORP bằng
COEP: credentialless