Iframe không có thông tin xác thực: Dễ dàng nhúng iframe trong môi trường COEP

Arthur Sonzogni
Arthur Sonzogni

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()đồ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?

<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