Kể từ Chrome 135, bạn có thể sử dụng giá trị sandbox
mới:
allow-same-site-none-cookies
. Khi bạn chỉ định chính sách này và không có cookie của bên thứ ba, trình duyệt sẽ chỉ gửi cookie SameSite=None
trong các yêu cầu HTTP bắt nguồn từ iframe hộp cát của bên thứ nhất.
Iframe trong hộp cát là gì?
Iframe trong hộp cát là các iframe có các quy định hạn chế đặc biệt. Các lớp này được coi là có nguồn gốc null
, mờ. Theo mặc định, các tính năng có thể gây hại như tập lệnh, biểu mẫu và cửa sổ bật lên sẽ không hoạt động trong iframe có thuộc tính hộp cát.
Sử dụng thuộc tính sandbox
để chỉ định những tính năng cần có của iframe trong hộp cát. Ví dụ:
<iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>
Bạn nên sử dụng hộp cát vì tính năng này cho phép bạn chọn chi tiết các quyền cần thiết để nội dung được nhúng tải thành công, đồng thời giới hạn phạm vi của các hành vi khai thác tiềm ẩn.
Tại sao chúng tôi cần chính sách mới này?
Trước khi allow-same-site-none-cookies
ra mắt, bạn có thể định cấu hình hai trường hợp cookie trong một iframe có thuộc tính hộp cát:
- Nếu không có mã thông báo
allow-same-origin
trong thuộc tínhsandbox
, thì nguồn gốc của iframe sẽ được sê-ri hoá dưới dạngnull
, khiến tất cả các yêu cầu từ trang hộp cát đều được thực hiện trên nhiều trang web. Trong trường hợp này, chỉ những cookie cóSameSite=None
mới được đưa vào yêu cầu. - Với mã thông báo
allow-same-origin
trong thuộc tínhsandbox
, các yêu cầu được coi là bắt nguồn từ nguồn gốc thực của iframe, cho phép gửi cookie có bất kỳ giá trịSameSite
nào.
Khi cookie của bên thứ ba bị chặn, một iframe trong hộp cát thiếu allow-same-origin
sẽ không thể gửi bất kỳ cookie nào trừ phi bạn bật allow-same-site-none-cookies
.
Một iframe có allow-same-origin
vẫn có thể đưa cookie vào các yêu cầu trên cùng một trang web, ngay cả khi cookie của bên thứ ba bị chặn. Tuy nhiên, toàn bộ hộp cookie của nguồn gốc sẽ bị lộ trước hoạt động web có khả năng độc hại.
Với allow-same-site-none-cookies
, một iframe có thể gửi cookie SameSite=None
trong các yêu cầu HTTP, trong khi cookie SameSite=Strict
và SameSite=Lax
có thể nhạy cảm sẽ không được đưa vào.
Ví dụ thực tế
Hãy xem xét một trang web, practice-coding.example
, cho phép người dùng tạo và chạy các dự án lập trình tuỳ chỉnh cũng như nhúng mã của người dùng khác. Để sử dụng dịch vụ, người dùng phải đăng nhập, dẫn đến việc đặt cookie phiên SameSite=Strict
.
Một người dùng khác tạo một dự án, practice-coding.example/cookie-theft
, mà người dùng khác có thể vô tình nhúng dưới dạng iframe trong dự án của họ. Nếu cookie SameSite=Strict
và SameSite=Lax
bị hiển thị với iframe practice-coding.example/cookie-theft
, thì người dùng độc hại có thể đánh cắp cookie phiên của người dùng khác.
Trong trường hợp này, chủ sở hữu trang web có thể muốn hạn chế quyền truy cập vào các cookie có thể nhạy cảm. Tuy nhiên, họ vẫn có thể muốn cho phép cookie SameSite=None
trong các iframe trong hộp cát. Ví dụ: khung hiển thị được đặt trong hộp cát practice-coding.example/coding-interview
có thể yêu cầu cookie SameSite=None
để cho phép ứng viên xem lại mã của họ.
allow-same-site-none-cookies
ngăn việc hiển thị toàn bộ hộp cookie trong khi cho phép chọn lọc các cookie SameSite=None
cần thiết.
Làm cách nào để chỉ cho phép SameSite=None
trong các khung hộp cát của bên thứ nhất?
Để bật cookie SameSite=None
trong các yêu cầu từ các trang hộp cát của bên thứ nhất, hãy chỉ định mã thông báo allow-same-site-none-cookies
trong thẻ iframe. Ví dụ:
<iframe sandbox="allow-same-site-none-cookies" src="example-sandboxed-page.html"/>
Bạn cũng có thể đặt chính sách allow-same-site-none-cookies
bằng Tiêu đề HTTP Content-Security-Policy
:
Content-Security-Policy: sandbox allow-same-site-none-cookies;
Hãy tự mình dùng thử với bản minh hoạ của chúng tôi.
Tham gia và chia sẻ ý kiến phản hồi
Gửi vấn đề để chia sẻ ý kiến phản hồi hoặc báo cáo vấn đề, hoặc tham gia cuộc thảo luận trên GitHub.