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

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.

Tính năng không cần thông tin xác thực của iframe được bật theo mặc định từ Chrome phiên bản 110. Tính năng này giải quyết vấn đề khiếu nại phổ biến nhất mà các nhà phát triển làm việc với Chính sách về trình 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 đó, 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. Môi trường này yêu cầu triển khai COEP. Tính năng Phân tách 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, bao gồm SharedArrayBuffer, performance.measureUserAgentSpecificMemory()các bộ 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 các tiêu đề HTTP sau:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

Bạn cũng có thể sử dụng COEP:credentialless thay cho require-corp. Hãy xem tài liệu để biết thêm thông tin chi tiết.

Thách thức khi bật COEP

Mặc dù tính năng tách biệt nhiều nguồn gốc giúp trang web bảo mật tốt hơn và có thể bật các tính năng mạnh mẽ, nhưng việc triển khai COEP có thể khó khăn. 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 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 đề đó.

Giải pháp không cần thông tin xác thực cho iframe

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 sẽ được tải từ một ngữ cảnh khác, trống. Cụ thể, tệp này được tải mà không cần cookie. Điều này cho phép xoá 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 liên kết với trang web cấp cao nhất. Thay vào đó, trình duyệt bắt đầu bằng một hộp bánh quy trống. Tương tự, các API bộ nhớ như LocalStorage, CacheStorage, IndexedDB, v.v. 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 của 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 giải phóng.

Iframe không có thông tin xác thực không phải tuân theo các quy tắc nhúng của COEP. Các tệp này vẫn an toàn: vì được tải từ một ngữ cảnh trống mới mỗi lần, nên các tệp này không được chứa dữ liệu được cá nhân hoá, đây là điều mà kẻ tấn công nhắm đến. Nếu 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ạ về 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ó lồng bên trong <iframe credentialless> không có thông tin xác thực không?

Có. Thuộc tính này được kế thừa. Khi một iframe không có thông tin xác thực, điều đó sẽ áp dụng cho tất cả iframe trong toàn bộ cây con ngay cả khi không có thuộc tính credentialless.

Cửa sổ bật lên được tạo từ <iframe credentialless> cũng không có thông tin xác thực phải không?

Cửa sổ bật lên sẽ mở ra như thể noopener đã được đặt. Các đối tượng 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à đối tượng không có thông tin xác thực. Các thành phần này không thể giao tiếp với iframe không có thông tin xác thực.

Làm cách nào để phát hiện tài liệu đã được nhúng trong một iframe không có thông tin xác thực?

window.credentialless là true bên trong một iframe không có thông tin xác thực và là false nếu không. Giá trị của thuộc tính này là undefined trong trình duyệt web không hỗ trợ <iframe credentialless>.

Tài nguyên