ตั้งแต่ Chrome 135 เป็นต้นไป คุณจะใช้ค่า sandbox
ใหม่ได้ ดังนี้
allow-same-site-none-cookies
เมื่อระบุนโยบายนี้และไม่มีคุกกี้ของบุคคลที่สาม เบราว์เซอร์จะส่งเฉพาะคุกกี้ SameSite=None
ในคําขอ HTTP ที่มาจาก iframe ที่ใช้แซนด์บ็อกซ์ของบุคคลที่หนึ่ง
iframe ที่ทำแซนด์บ็อกซ์คืออะไร
iframe ที่อยู่ในแซนด์บ็อกซ์คือ iframe ที่มีข้อจํากัดพิเศษ ระบบจะถือว่ามีต้นทางเป็นnull
ทึบแสง โดยค่าเริ่มต้น ฟีเจอร์ที่อาจเป็นอันตราย เช่น สคริปต์ แบบฟอร์ม และป๊อปอัป จะใช้ไม่ได้ภายใน iframe ที่ทำแซนด์บ็อกซ์
ใช้แอตทริบิวต์ sandbox
เพื่อระบุฟีเจอร์ที่ควรมี iframe ที่ใช้แซนด์บ็อกซ์ เช่น
<iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>
การใช้แซนด์บ็อกซ์เป็นความคิดที่ดีเสมอ เนื่องจากช่วยให้คุณเลือกสิทธิ์ที่จำเป็นในการโหลดเนื้อหาที่ฝังไว้ให้เสร็จสมบูรณ์ได้แบบละเอียด พร้อมทั้งจำกัดขอบเขตของการโจมตีที่อาจเกิดขึ้น
เหตุใดเราจึงต้องมีนโยบายใหม่นี้
ก่อนเปิดตัว allow-same-site-none-cookies
คุณสามารถกําหนดค่าสถานการณ์คุกกี้ 2 รูปแบบภายใน iframe ที่ทำแซนด์บ็อกซ์ ดังนี้
- หากไม่มีโทเค็น
allow-same-origin
ในแอตทริบิวต์sandbox
ระบบจะแปลงต้นทางของ iframe เป็นnull
ซึ่งทำให้คำขอทั้งหมดจากหน้าที่อยู่ในแซนด์บ็อกซ์เป็นแบบข้ามเว็บไซต์ ในกรณีนี้ จะมีเฉพาะคุกกี้ที่มีSameSite=None
เท่านั้นที่รวมอยู่ในคำขอ - เมื่อใช้โทเค็น
allow-same-origin
ในแอตทริบิวต์sandbox
ระบบจะถือว่าคําขอนั้นมาจากต้นทางจริงของ iframe ซึ่งจะอนุญาตให้ส่งคุกกี้ที่มีค่าSameSite
ใดก็ได้
เมื่อบล็อกคุกกี้ของบุคคลที่สามแล้ว iframe ที่อยู่ในแซนด์บ็อกซ์ที่ไม่มี allow-same-origin
จะส่งคุกกี้ไม่ได้ เว้นแต่คุณจะเปิดใช้ allow-same-site-none-cookies
iFrame ที่มี allow-same-origin
จะยังคงรวมคุกกี้ในคำขอในเว็บไซต์เดียวกันได้ แม้ว่าจะมีการบล็อกคุกกี้ของบุคคลที่สามก็ตาม อย่างไรก็ตาม คุกกี้ทั้งหมดของต้นทางจะแสดงกิจกรรมบนเว็บที่อาจเป็นอันตราย
เมื่อใช้ allow-same-site-none-cookies
จะทำให้ iframe ส่งคุกกี้ SameSite=None
ในคำขอ HTTP ได้ โดยไม่รวมคุกกี้ SameSite=Strict
และ SameSite=Lax
ที่อาจมีความละเอียดอ่อน
ตัวอย่างการใช้งานจริง
พิจารณาเว็บไซต์ practice-coding.example
ที่อนุญาตให้ผู้ใช้สร้างและเรียกใช้โปรเจ็กต์การเขียนโค้ดที่กำหนดเอง รวมถึงฝังโค้ดของผู้ใช้รายอื่น หากต้องการใช้บริการ ผู้ใช้ต้องลงชื่อเข้าใช้ ซึ่งจะส่งผลให้มีการตั้งค่าคุกกี้เซสชัน SameSite=Strict
ผู้ใช้รายอื่นสร้างโปรเจ็กต์ practice-coding.example/cookie-theft
ซึ่งผู้ใช้รายอื่นสามารถฝังเป็น iframe ในโปรเจ็กต์ของตนได้โดยไม่ตั้งใจ หากคุกกี้ SameSite=Strict
และ SameSite=Lax
แสดงใน iframe ของ practice-coding.example/cookie-theft
ผู้ใช้ที่เป็นอันตรายอาจขโมยคุกกี้เซสชันของผู้ใช้รายอื่นได้
ในกรณีนี้ เจ้าของเว็บไซต์อาจต้องจํากัดการเข้าถึงคุกกี้ที่อาจมีความละเอียดอ่อน อย่างไรก็ตาม ผู้ใช้อาจยังต้องการอนุญาตคุกกี้ SameSite=None
ภายใน iframe ที่ใช้แซนด์บ็อกซ์ เช่น practice-coding.example/coding-interview
iframe ที่ใช้แซนด์บ็อกซ์อาจต้องใช้SameSite=None
คุกกี้เพื่อให้ผู้สมัครกลับมาดูโค้ดอีกครั้งได้
allow-same-site-none-cookies
ป้องกันไม่ให้เปิดเผยคุกกี้ทั้งหมดขณะที่เลือกอนุญาตคุกกี้ SameSite=None
ที่จําเป็น
ฉันจะอนุญาตเฉพาะ SameSite=None
ในเฟรมที่ทำแซนด์บ็อกซ์ของบุคคลที่หนึ่งได้อย่างไร
หากต้องการเปิดใช้คุกกี้ SameSite=None
ในคําขอจากหน้าที่อยู่ในแซนด์บ็อกซ์ของบุคคลที่หนึ่ง ให้ระบุโทเค็น allow-same-site-none-cookies
ในแท็ก iframe เช่น
<iframe sandbox="allow-same-site-none-cookies" src="example-sandboxed-page.html"/>
นอกจากนี้ คุณยังตั้งค่านโยบาย allow-same-site-none-cookies
ด้วยส่วนหัว HTTP Content-Security-Policy
ได้ด้วย โดยทำดังนี้
Content-Security-Policy: sandbox allow-same-site-none-cookies;
ลองใช้ด้วยตัวคุณเองจากเดโม
มีส่วนร่วมและแชร์ความคิดเห็น
แจ้งปัญหาเพื่อแชร์ความคิดเห็นหรือรายงานปัญหา หรือเข้าร่วมการสนทนาใน GitHub