Bản dùng thử theo nguyên gốc iframe ẩn danh: 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.

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

  1. Yêu cầu mã thông báo cho nguồn gốc của bạn.
  2. 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
  3. 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?

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