ค่าใหม่ของ sandbox allow-same-site-none-cookies จาก Chrome 135

ตั้งแต่ 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