คุกกี้ที่มีสถานะพาร์ติชันอิสระ (CHIPS)

อนุญาตให้นักพัฒนาซอฟต์แวร์เลือกใช้คุกกี้ในพื้นที่เก็บข้อมูลที่ "แบ่งพาร์ติชันแล้ว" โดยมีโหลคุกกี้แยกต่างหากสำหรับแต่ละเว็บไซต์ระดับบนสุด

สถานะการใช้งาน

การสนับสนุนเบราว์เซอร์

  • 114
  • 114
  • x
  • x

แหล่งที่มา

CHIPS คืออะไร

คุกกี้ที่มีสถานะพาร์ติชันอิสระ (CHIPS) ช่วยให้นักพัฒนาซอฟต์แวร์เลือกใช้คุกกี้ในพื้นที่เก็บข้อมูลที่แบ่งพาร์ติชันได้ โดยมีขวดคุกกี้แยกต่างหากสำหรับแต่ละเว็บไซต์ระดับบนสุด ช่วยปรับปรุงความเป็นส่วนตัวและความปลอดภัยของผู้ใช้

หากไม่มีการแบ่งพาร์ติชัน คุกกี้ของบุคคลที่สามสามารถเปิดใช้บริการเพื่อติดตามผู้ใช้และรวมข้อมูลจากเว็บไซต์ระดับบนสุดจำนวนมากที่ไม่เกี่ยวข้องได้ วิธีนี้เรียกว่าการติดตามข้ามเว็บไซต์

ขณะนี้เบราว์เซอร์กำลังมีการเลิกใช้งานคุกกี้ของบุคคลที่สามที่ไม่ได้แบ่งพาร์ติชัน ดังนั้น CHIPS, Storage Access API และชุดเว็บไซต์ที่เกี่ยวข้องจะเป็นวิธีเดียวในการอ่านและเขียนคุกกี้จากบริบทแบบข้ามเว็บไซต์ เช่น iframe เมื่อมีการบล็อกคุกกี้ของบุคคลที่สาม

แผนภาพแสดงวิธีแชร์การทำอาหารระหว่างเว็บไซต์ 2 แห่ง
เมื่อไม่มีการแบ่งพาร์ติชันคุกกี้ บริการของบุคคลที่สามจะตั้งค่าคุกกี้ได้เมื่อฝังในเว็บไซต์ระดับบนสุดเว็บไซต์หนึ่ง และเข้าถึงคุกกี้เดียวกันนั้นเมื่อบริการฝังในเว็บไซต์ระดับบนสุดอื่นๆ

CHIPS ขอแนะนำแอตทริบิวต์คุกกี้ใหม่ที่ชื่อว่า Partitioned เพื่อรองรับคุกกี้ข้ามเว็บไซต์ที่แบ่งพาร์ติชันตามบริบทระดับบนสุด

ส่วนหัว Set-Cookie:

Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;

JavaScript:

document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"

คุกกี้ของบุคคลที่สามที่แบ่งพาร์ติชันจะเชื่อมโยงกับเว็บไซต์ระดับบนสุดที่ตั้งค่าในตอนแรกและไม่สามารถเข้าถึงจากที่อื่นได้ วิธีนี้จะทำให้อ่านคุกกี้ที่กำหนดโดยบริการของบุคคลที่สามได้ในบริบทที่ฝังไว้ของเว็บไซต์ระดับบนสุดที่ตั้งค่าในตอนแรกเท่านั้น

แผนภาพที่แสดงให้เห็นว่าเว็บไซต์ 2 แห่งที่ฝังบุคคลที่สามทั่วไปจะไม่แชร์คุกกี้สำหรับบุคคลที่สามนั้นอีกต่อไป
เมื่อใช้การแบ่งพาร์ติชันคุกกี้ บริการของบุคคลที่สามที่ตั้งค่าคุกกี้เมื่อฝังในเว็บไซต์ระดับบนสุดเว็บไซต์หนึ่งจะเข้าถึงคุกกี้เดียวกันนั้นไม่ได้หากบริการนั้นฝังอยู่ในเว็บไซต์ระดับบนสุดอื่นๆ

เมื่อใช้คุกกี้ที่แบ่งพาร์ติชันแล้ว เมื่อผู้ใช้เข้าชมเว็บไซต์ A และเนื้อหาที่ฝังจากเว็บไซต์ C ตั้งค่าคุกกี้ด้วยแอตทริบิวต์ที่แบ่งพาร์ติชันแล้ว ระบบจะบันทึกคุกกี้ไว้ในโหลที่แบ่งพาร์ติชันแล้วสำหรับคุกกี้ที่เว็บไซต์ C กำหนดไว้เมื่อฝังในเว็บไซต์ A เท่านั้น เบราว์เซอร์จะส่งคุกกี้ดังกล่าวก็ต่อเมื่อเว็บไซต์ระดับบนสุดคือ A

เมื่อผู้ใช้เข้าชมเว็บไซต์ใหม่ ตัวอย่างเช่น เว็บไซต์ B เฟรม C ที่ฝังจะไม่ได้รับคุกกี้ที่ตั้งค่าเมื่อ C ถูกฝังในเว็บไซต์ A

หากผู้ใช้เข้าชมเว็บไซต์ C ในฐานะเว็บไซต์ระดับบนสุด คุกกี้ที่แบ่งพาร์ติชันซึ่ง C ตั้งค่าไว้เมื่อเว็บไซต์ C ฝังอยู่ในคำขอนั้นจะไม่ถูกส่งไปด้วย

แผนภาพแสดงให้เห็นว่าไม่มีการแชร์คุกกี้เมื่อบุคคลที่สามรายเดียวกันฝังในเว็บไซต์ 2 แห่งที่แตกต่างกัน
เมื่อใช้การแบ่งพาร์ติชันคุกกี้ บริการของบุคคลที่สามที่ตั้งค่าคุกกี้เมื่อฝังไว้ในเว็บไซต์จะเข้าถึงคุกกี้เดียวกันนั้นไม่ได้แม้ว่าผู้ใช้จะเข้าชมเว็บไซต์ดังกล่าวในฐานะเว็บไซต์ระดับบนสุดก็ตาม

Use Case

ตัวอย่างเช่น เว็บไซต์ retail.example อาจต้องการทำงานร่วมกับบริการของบุคคลที่สาม support.chat.example เพื่อฝังกล่องแชทเพื่อการสนับสนุนบนเว็บไซต์ ปัจจุบันบริการแชทที่ฝังได้หลายบริการใช้คุกกี้เพื่อบันทึกสถานะ

แผนภาพที่แสดงเว็บไซต์ที่มีวิดเจ็ตแชทที่ถูกฝังไว้
เว็บไซต์ของผู้ค้าปลีกระดับบนได้ฝังบริการของบุคคลที่สาม support.chat.example ไว้

หากไม่มีความสามารถในการตั้งค่าคุกกี้ข้ามเว็บไซต์ support.chat.example จะต้องหาเมธอดการจัดเก็บแบบอื่นที่มักซับซ้อนกว่า หรือจะต้องฝังในหน้าระดับบนสุดซึ่งก่อให้เกิดความเสี่ยงเนื่องจากอนุญาตให้สคริปต์ support.chat.example มีสิทธิ์ในระดับสูงขึ้นในRetail.example เช่น ความสามารถในการเข้าถึงคุกกี้การตรวจสอบสิทธิ์

CHIPS มอบตัวเลือกที่ง่ายขึ้นในการใช้คุกกี้ข้ามเว็บไซต์ต่อไป โดยไม่เกิดความเสี่ยงที่เกี่ยวข้องกับคุกกี้ที่ไม่ได้แบ่งพาร์ติชัน

ตัวอย่างกรณีการใช้งาน CHIPS รวมถึงสถานการณ์ที่ทรัพยากรย่อยข้ามเว็บไซต์ต้องมีแนวคิดเกี่ยวกับเซสชันหรือสถานะถาวรที่กำหนดขอบเขตเฉพาะกิจกรรมของผู้ใช้ในเว็บไซต์ระดับบนสุดเว็บไซต์เดียว เช่น

  • การฝังแชทของบุคคลที่สาม
  • การฝังแผนที่ของบุคคลที่สาม
  • การฝังการชำระเงินของบุคคลที่สาม
  • การจัดสรรภาระงาน CDN ของทรัพยากรย่อย
  • ผู้ให้บริการ CMS แบบ Headless
  • โดเมนแซนด์บ็อกซ์สำหรับแสดงเนื้อหาของผู้ใช้ที่ไม่น่าเชื่อถือ (เช่น googleusercontent.com และ githubusercontent.com)
  • CDN ของบุคคลที่สามที่ใช้คุกกี้เพื่อแสดงเนื้อหาที่ควบคุมการเข้าถึง ซึ่งควบคุมโดยสถานะการตรวจสอบสิทธิ์ในเว็บไซต์ของบุคคลที่หนึ่ง (เช่น รูปโปรไฟล์ในเว็บไซต์โซเชียลมีเดียที่โฮสต์บน CDN ของบุคคลที่สาม)
  • เฟรมเวิร์กส่วนหน้าที่อาศัย API ระยะไกลที่ใช้คุกกี้ในคำขอ
  • โฆษณาแบบฝังที่จำเป็นต้องมีขอบเขตระดับรัฐต่อผู้เผยแพร่โฆษณา (เช่น การบันทึกค่าที่กำหนดเองของโฆษณาของผู้ใช้สำหรับเว็บไซต์นั้น)

เหตุใด CHIPS จึงใช้รูปแบบการแบ่งพาร์ติชันแบบเลือกใช้

ในขณะที่เบราว์เซอร์กำลังเลิกใช้คุกกี้ของบุคคลที่สามที่ไม่ได้แบ่งพาร์ติชัน จึงมีความพยายามอีก 2-3 วิธีในการแบ่งพาร์ติชัน

Firefox ประกาศว่าบริษัทแบ่งพาร์ติชันคุกกี้ของบุคคลที่สามทั้งหมดโดยค่าเริ่มต้นในโหมด ETP Strict และโหมดการเรียกดูแบบส่วนตัว ดังนั้นคุกกี้ข้ามเว็บไซต์ทั้งหมดจึงได้รับการแบ่งพาร์ติชันโดยเว็บไซต์ระดับบนสุด อย่างไรก็ตาม การแบ่งพาร์ติชันคุกกี้โดยไม่เลือกใช้ของบุคคลที่สามอาจทำให้เกิดข้อบกพร่องที่ไม่คาดคิด เนื่องจากบริการของบุคคลที่สามบางแห่งได้สร้างเซิร์ฟเวอร์ซึ่งคาดว่าจะมีคุกกี้ของบุคคลที่สามที่ไม่ได้แบ่งพาร์ติชัน

ก่อนหน้านี้ Safari ได้ลองแบ่งพาร์ติชันคุกกี้ตามวิธีการสำรวจ แต่ในที่สุดแล้วก็เลือกที่จะบล็อกคุกกี้ทั้งหมด โดยอ้างว่านักพัฒนาแอปสับสนเป็นเหตุผลหนึ่ง เมื่อเร็วๆ นี้ Safari ได้แสดงความสนใจในรูปแบบการเลือกใช้

สิ่งที่ทำให้ CHIPS แตกต่างจากการใช้งานคุกกี้ที่แบ่งพาร์ติชันที่มีอยู่เดิมคือการเลือกใช้ของบุคคลที่สาม ต้องตั้งค่าคุกกี้ด้วยแอตทริบิวต์ใหม่เพื่อให้ส่งในคำขอข้ามบุคคลที่สามเมื่อมีการเลิกใช้งานคุกกี้ของบุคคลที่สาม (ไม่ได้แบ่งพาร์ติชัน)

ขณะที่คุกกี้ของบุคคลที่สามจะยังคงอยู่ แอตทริบิวต์ Partitioned จะให้การเลือกใช้ประเภทการทำงานของคุกกี้ที่จำกัดและปลอดภัยยิ่งขึ้น CHIPS เป็นขั้นตอนสำคัญที่จะช่วยให้บริการต่างๆ ดำเนินการเปลี่ยนไปสู่อนาคตที่ราบรื่นโดยไม่ต้องใช้คุกกี้ของบุคคลที่สาม

ปัจจุบัน คุกกี้จะผูกกับชื่อโฮสต์หรือโดเมนของเว็บไซต์ที่ตั้งค่า ซึ่งก็คือคีย์โฮสต์

เช่น สำหรับคุกกี้จาก https://support.chat.example คีย์โฮสต์คือ ("support.chat.example")

ในส่วน CHIPS คุกกี้ที่เลือกใช้การแบ่งพาร์ติชันจะมีการผูกกับคีย์โฮสต์และคีย์พาร์ติชันของคีย์โฮสต์นั้น

คีย์พาร์ติชันของคุกกี้คือเว็บไซต์ (รูปแบบและโดเมนที่จดทะเบียนได้) ของ URL ระดับบนสุดที่เบราว์เซอร์เข้าชมเมื่อเริ่มต้นคำขอและส่งไปยังปลายทางที่ตั้งค่าคุกกี้

ในตัวอย่างก่อนหน้านี้ ซึ่ง https://support.chat.example ฝังอยู่ใน https://retail.example URL ระดับบนสุดคือ https://retail.example

คีย์พาร์ติชันในกรณีนี้คือ ("https", "retail.example")

ในทำนองเดียวกัน คีย์พาร์ติชันของคำขอคือเว็บไซต์ของ URL ระดับบนสุดที่เบราว์เซอร์กำลังเข้าชมเมื่อเริ่มต้นคำขอ เบราว์เซอร์ต้องส่งคุกกี้ที่มีแอตทริบิวต์ Partitioned ในคำขอที่มีคีย์พาร์ติชันเดียวกันกับคุกกี้ดังกล่าวเท่านั้น

นี่คือลักษณะคีย์คุกกี้ในตัวอย่างก่อนหน้านี้และหลัง CHIPS

เว็บไซต์ A และเว็บไซต์ C ที่ฝังไว้จะใช้คุกกี้ที่แบ่งพาร์ติชันร่วมกัน เมื่อไม่ได้ฝังไว้ เว็บไซต์ C จะเข้าถึงคุกกี้ที่แบ่งพาร์ติชันแล้วไม่ได้
เว็บไซต์ A และเว็บไซต์ C ที่ฝังไว้แชร์คุกกี้ที่แบ่งพาร์ติชันแล้ว เมื่อไม่ได้ฝังไว้ เว็บไซต์ C จะเข้าถึงคุกกี้ที่แบ่งพาร์ติชันแล้วไม่ได้

ก่อนชิป

key=("support.chat.example")

หลังจากชิป

key={("support.chat.example"),("https", "retail.example")}

การออกแบบความปลอดภัย

CHIPS จะมีการกำหนดและส่งคุกกี้ผ่านโปรโตคอลที่ปลอดภัยเท่านั้น เพื่อเป็นการส่งเสริมแนวทางปฏิบัติด้านความปลอดภัยที่ดี

  • ต้องตั้งค่าคุกกี้ที่แบ่งพาร์ติชันด้วย Secure
  • ขอแนะนำให้ใช้คำนำหน้า __Host เมื่อตั้งค่าคุกกี้ที่แบ่งพาร์ติชันให้เชื่อมโยงกับชื่อโฮสต์ (ไม่ใช่โดเมนที่จดทะเบียนได้)

ตัวอย่าง

Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

ตัวเลือกอื่นแทนการใช้ CHIPS

API การเข้าถึงพื้นที่เก็บข้อมูลและชุดเว็บไซต์ที่เกี่ยวข้อง (RWS) ที่เกี่ยวข้องเป็นกลไกของแพลตฟอร์มบนเว็บที่อนุญาตให้มีการเข้าถึงคุกกี้ข้ามเว็บไซต์แบบจำกัดเพื่อวัตถุประสงค์ที่เฉพาะเจาะจงและแสดงต่อผู้ใช้

วิธีนี้เป็นทางเลือกที่จะใช้แทนการแบ่งพาร์ติชัน CHIPS เมื่อจำเป็นต้องมีสิทธิ์เข้าถึงคุกกี้แบบข้ามเว็บไซต์ที่ไม่มีการแบ่งพาร์ติชัน

ลองใช้ Storage Access API และชุดเว็บไซต์ที่เกี่ยวข้องในสถานการณ์ต่างๆ ที่จำเป็นต้องใช้คุกกี้เดียวกันในบริการที่ฝังอยู่ในเว็บไซต์ที่เกี่ยวข้องหลายแห่ง

CHIPS ทำให้บริการทำหน้าที่เป็นคอมโพเนนต์ที่แยกออกมาในหลายเว็บไซต์ได้ โดยที่คุกกี้เดียวกันไม่จำเป็นต้องพร้อมใช้งานในหลายเว็บไซต์ หากบริการตั้งค่าคุกกี้ที่แบ่งพาร์ติชันแล้ว คีย์พาร์ติชันจะเป็นเว็บไซต์ระดับบนสุด และคุกกี้ดังกล่าวจะไม่พร้อมใช้งานในเว็บไซต์อื่นที่ใช้บริการอยู่

การออกแบบชุดเว็บไซต์ที่เกี่ยวข้องใช้ Storage Access API และไม่ผสานรวมกับการแบ่งพาร์ติชัน CHIPS หากมี Use Case ที่อาศัยพาร์ติชันคุกกี้ที่แชร์ในเว็บไซต์ต่างๆ ภายใน RWS โปรดแสดงตัวอย่างและความคิดเห็นเกี่ยวกับปัญหาของ GitHub

ข้อมูลประชากร

การสาธิตนี้จะแนะนำวิธีการทำงานของคุกกี้ที่มีการแบ่งพาร์ติชัน และวิธีตรวจสอบคุกกี้ดังกล่าวในเครื่องมือสำหรับนักพัฒนาเว็บ

เว็บไซต์ A ฝัง iframe จากเว็บไซต์ B ซึ่งใช้ JavaScript เพื่อตั้งค่าคุกกี้ 2 รายการ ได้แก่ คุกกี้ที่แบ่งพาร์ติชันแล้วและยังไม่ได้แบ่งพาร์ติชัน เว็บไซต์ ข แสดงคุกกี้ทั้งหมดที่เข้าถึงได้จากตำแหน่งนั้นโดยใช้ document.cookie

เมื่อบล็อกคุกกี้ของบุคคลที่สาม เว็บไซต์ ข จะทำได้เพียงตั้งค่าและเข้าถึงคุกกี้ด้วยแอตทริบิวต์ Partitioned ในบริบทแบบข้ามเว็บไซต์เท่านั้น

เมื่ออนุญาตคุกกี้ของบุคคลที่สาม เว็บไซต์ B จะตั้งและเข้าถึงคุกกี้ที่ไม่ได้แบ่งพาร์ติชันได้ด้วย

เว็บไซต์ ก. และเว็บไซต์ ข.
ซ้าย: บล็อกคุกกี้ของบุคคลที่สามอยู่ ขวา: อนุญาตคุกกี้ของบุคคลที่สาม

ข้อกำหนดเบื้องต้น

  1. Chrome 118 ขึ้นไป
  2. ไปที่ chrome://flags/#test-third-party-cookie-phaseout และเปิดใช้การตั้งค่านี้

ใช้เครื่องมือสำหรับนักพัฒนาเว็บเพื่อตรวจสอบคุกกี้ที่แบ่งพาร์ติชันแล้ว

  1. ไปที่ https://chips-site-a.glitch.me
  2. กด Control+Shift+J (หรือ Command+Option+J ใน Mac) เพื่อเปิดเครื่องมือสำหรับนักพัฒนาเว็บ
  3. คลิกแท็บแอปพลิเคชัน
  4. ไปที่แอปพลิเคชัน > พื้นที่เก็บข้อมูล > คุกกี้
  5. คลิก https://chips-site-b.glitch.me

เครื่องมือสำหรับนักพัฒนาเว็บจะแสดงคุกกี้ทั้งหมดจากต้นทางที่เลือก

คุกกี้จากเว็บไซต์ ข ในแท็บแอปพลิเคชันเครื่องมือสำหรับนักพัฒนาเว็บ

เว็บไซต์ B สามารถตั้งค่าคุกกี้ที่แบ่งพาร์ติชันในบริบทแบบข้ามเว็บไซต์ได้เท่านั้น คุกกี้ที่ไม่ได้แบ่งพาร์ติชันจะถูกบล็อก

  • คุณควรเห็น __Host-partitioned-cookie พร้อมคีย์พาร์ติชันของเว็บไซต์ระดับบนสุด https://chips-site-a.glitch.me
คีย์พาร์ติชันสำหรับ __Host-partitioned-cookie
  1. คลิกไปที่เว็บไซต์ ข
  2. ในเครื่องมือสำหรับนักพัฒนาเว็บ ให้ไปที่แอปพลิเคชัน > พื้นที่เก็บข้อมูล > คุกกี้
  3. คลิก https://chips-site-b.glitch.me
ไซต์ ข
ระดับบนสุด เว็บไซต์ B จะเห็นคุกกี้ทั้งหมดทั้งแบบที่มีการแบ่งพาร์ติชันและไม่ได้แบ่งพาร์ติชัน

ในสถานการณ์นี้ เนื่องจากคุณอยู่ในเว็บไซต์ B ในบริบทระดับบนสุด จึงสามารถตั้งค่าและเข้าถึงคุกกี้ได้ทั้ง 2 รายการดังนี้

  • unpartitioned-cookie มีคีย์พาร์ติชันที่ว่างเปล่า
  • คุกกี้ __Host-partitioned-cookie มีคีย์พาร์ติชัน https://chips-site-b.glitch.me
คุกกี้จากเว็บไซต์ B ในแท็บแอปพลิเคชันสำหรับนักพัฒนาเว็บเมื่อเข้าชม B ในฐานะเว็บไซต์ระดับบนสุด __Host-partitioned-cookie มีคีย์พาร์ติชัน https://chips-site-b.glitch.me

หากคุณกลับไปที่เว็บไซต์ A ตอนนี้ unpartitioned-cookie จะได้รับการจัดเก็บไว้ในเบราว์เซอร์ แต่คุณจะเข้าถึงจากเว็บไซต์ A ไม่ได้

  1. คลิกไปที่เว็บไซต์ ก
  2. คลิกแท็บเครือข่าย
  3. คลิก https://chips-site-b.glitch.me
  4. คลิกแท็บ Cookies

ขณะอยู่ในเว็บไซต์ A คุณควรเห็น __Host-partitioned-cookie พร้อมคีย์พาร์ติชันของเว็บไซต์ระดับบนสุด https://chips-site-a.glitch.me

แท็บเครือข่ายที่แสดงคุกกี้จาก iframe ของเว็บไซต์ B ซึ่งเข้าถึงได้เมื่อฝังไว้ในเว็บไซต์ ก

หากคุณเลือกแสดงคำขอคุกกี้ที่กรองออก เครื่องมือสำหรับนักพัฒนาเว็บจะแสดงว่าคุกกี้ที่ไม่ได้แบ่งพาร์ติชันถูกบล็อก โดยไฮไลต์ด้วยเคล็ดลับเครื่องมือสีเหลือง "คุกกี้นี้ถูกบล็อกเนื่องจากค่ากำหนดของผู้ใช้"

แท็บเครือข่ายแสดงคุกกี้ที่ถูกบล็อกจาก iframe ของเว็บไซต์ B

ใน Application > Storage > Cookies การคลิก https://chips-site-b.glitch.me จะแสดงขึ้นมา

  • unpartitioned-cookie ด้วยคีย์พาร์ติชันที่ว่างเปล่า
  • คุกกี้ __Host-partitioned-cookie ที่มีคีย์พาร์ติชัน https://chips-site-a.glitch.me
คุกกี้จากเว็บไซต์ ข ในแท็บแอปพลิเคชันเครื่องมือสำหรับนักพัฒนาเว็บ คุกกี้ __Host-partitioned-cookie มีคีย์พาร์ติชัน https://chips-site-a.glitch.me unpartitioned-cookie แสดงอยู่ แต่ iframe ของเว็บไซต์ ข จะเข้าถึงไม่ได้เมื่อฝังไว้ในเว็บไซต์ ก

ล้างคุกกี้

หากต้องการรีเซ็ตเดโม ให้ล้างคุกกี้ทั้งหมดของเว็บไซต์ ดังนี้

  • กด Control+Shift+J (หรือ Command+Option+J ใน Mac) เพื่อเปิดเครื่องมือสำหรับนักพัฒนาเว็บ
  • คลิกแท็บแอปพลิเคชัน
  • ไปที่แอปพลิเคชัน > พื้นที่เก็บข้อมูล > คุกกี้
  • คลิกขวาที่ https://chips-site-b.glitch.me
  • คลิกล้าง

แหล่งข้อมูล