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.
Iframe không cần thông tin xác thực được bật theo mặc định từ Chrome phiên bản 110. Tài liệu này giải quyết các đơn khiếu nại phổ biến nhất mà các nhà phát triển đang xử lý về Chính sách nhúng nhiều nguồn gốc (COEP) gặp phải: nhúng iframe của bên thứ ba không đặt 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 đó, 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. Môi trường này yêu cầu bạn phải triển khai COEP. Tính năng tách biệt nhiều nguồn gốc cho phép các trang web sử dụng các tính năng đặc quyền như 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, trang web phải gửi các tiêu đề HTTP sau:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Bạn cũng có thể dùng COEP:credentialless để thay thế cho require-corp
. Hãy xem tài liệu để biết thêm thông tin chi tiết.
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 nhiều nguồn gốc phải triển khai COEP và CORP. Iframe không có tiêu đề đó sẽ không được trình duyệt tải.
Iframe không thông tin xác thực đến phần cứu nguy
Chúng tôi sẽ ra mắt <iframe credentialless>
để giúp nhúng các iframe của bên thứ ba không đặt COEP. Bằng cách thêm thuộc tính credentialless
vào phần tử <iframe>
, iframe này sẽ được tải từ một ngữ cảnh trống khác. Cụ thể, trang này được tải mà không cần cookie. Điều này cho phép gỡ bỏ quy định hạn chế về COEP.
Ví dụ:
<iframe credentialless src="https://example.com">
iframe này đượ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 được liên kết với trang web cấp cao nhất. Thay vào đó, tệp này sẽ bắt đầu bằng một lọ bánh quy trống. Tương tự, các API lưu trữ như LocalStorage, CacheStorage, IndexedDB, v.v. 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 được xác định phạm vi cho cả tài liệu cấp cao nhất hiện tại và nguồn gốc của iframe. Tất cả bộ nhớ này sẽ bị xoá sau khi tài liệu cấp cao nhất được huỷ tải.
iframe không có thông tin xác thực không phải tuân theo quy tắc nhúng COEP. Các mã 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, nên chúng không được chứa dữ liệu được cá nhân hoá – mục đích của kẻ tấn công. Nếu iframe chỉ chứa dữ liệu công khai thì iframe đó sẽ không có giá trị đối với kẻ tấn công.
Bản minh hoạ
Bạn có thể xem bản minh hoạ iframe không có thông tin xác thực.
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
- TAG W3C Yêu cầu vị trí: đã hài lòng
<iframe>
có được lồng trong một <iframe credentialless>
không có thông tin xác thực không?
Có. Tên này được kế thừa. Khi một iframe không có thông tin xác thực, 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 credentialless
.
Các cửa sổ bật lên có được tạo từ <iframe credentialless>
không cần thông tin xác thực không?
Cửa sổ bật lên sẽ mở ra như thể bạn đã đặt noopener
. Các khoá này được tạo trong ngữ cảnh cấp cao nhất thông thường mới và không phải là không có thông tin xác thực. Chúng không thể giao tiếp với iframe không có thông tin xác thực.
Cách phát hiện tài liệu đã được nhúng trong iframe không có thông tin xác thực?
window.credentialless
là true bên trong iframe không có thông tin xác thực và là false nếu không có thông tin xác thực. Trong một trình duyệt web không hỗ trợ <iframe credentialless>
, giá trị của lớp này là undefined
.
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
- IFrame không thông tin xác thực – Bảo mật web | MDN