อนุญาตให้นักพัฒนาแอปเลือกใช้คุกกี้ในพื้นที่เก็บข้อมูล "ที่แบ่งพาร์ติชัน" โดยมีที่เก็บคุกกี้แยกต่างหากต่อเว็บไซต์ระดับบนสุด
สถานะการติดตั้งใช้งาน
- รองรับโดยค่าเริ่มต้นใน Chrome 114 ขึ้นไป
- ช่วงทดลองใช้จากต้นทางสิ้นสุดลงและพร้อมใช้งานแล้วใน Chrome 100 ถึง 116
- อ่านความตั้งใจที่จะทดสอบและความตั้งใจที่จะจัดส่ง
CHIPS คืออะไร
Cookies Having Independent Partitioned State (CHIPS) ช่วยให้นักพัฒนาแอปเลือกใช้คุกกี้ในพื้นที่เก็บข้อมูลที่แบ่งพาร์ติชันได้ โดยมีกระปุกคุกกี้แยกกันสำหรับแต่ละเว็บไซต์ระดับบนสุด ซึ่งจะช่วยปรับปรุงความเป็นส่วนตัวและความปลอดภัยของผู้ใช้
หากไม่มีการแบ่งพาร์ติชัน คุกกี้ของบุคคลที่สามจะช่วยให้บริการต่างๆ ติดตามผู้ใช้และรวมข้อมูลจากเว็บไซต์ระดับบนสุดที่ไม่เกี่ยวข้องจำนวนมากได้ ซึ่งเรียกว่าการติดตามข้ามเว็บไซต์
Storage Access API ของ CHIPS และชุดเว็บไซต์ที่เกี่ยวข้องเป็นวิธีเดียวในการอ่านและเขียนคุกกี้จากบริบทแบบข้ามเว็บไซต์ เช่น iframe เมื่อมีการบล็อกคุกกี้ของบุคคลที่สาม

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;"
คุกกี้ของบุคคลที่สามที่แบ่งพาร์ติชันจะเชื่อมโยงกับเว็บไซต์ระดับบนสุดที่ตั้งค่าไว้ในตอนแรก และจะเข้าถึงจากที่อื่นไม่ได้ ด้วยวิธีนี้ คุกกี้ที่บริการของบุคคลที่สามตั้งค่าไว้จะอ่านได้เฉพาะในบริบทที่ฝังเดียวกันของเว็บไซต์ระดับบนสุดที่ตั้งค่าไว้ในตอนแรกเท่านั้น

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

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

support.chat.example
หากไม่มีความสามารถในการตั้งค่าคุกกี้ข้ามเว็บไซต์ support.chat.example
จะต้องหาวิธีอื่นในการจัดเก็บสถานะ ซึ่งมักจะซับซ้อนกว่า หรืออาจต้องฝังไว้ในหน้าเว็บระดับบนสุด ซึ่งจะทำให้เกิดความเสี่ยงเนื่องจากจะอนุญาตให้สคริปต์ support.chat.example
มีสิทธิ์ที่สูงขึ้นใน retail.example เช่น ความสามารถในการเข้าถึงคุกกี้การตรวจสอบสิทธิ์
CHIPS เป็นตัวเลือกที่ง่ายกว่าในการใช้คุกกี้ข้ามเว็บไซต์ต่อไปโดยไม่มีความเสี่ยงที่เกี่ยวข้องกับคุกกี้ที่ไม่ได้แบ่งพาร์ติชัน
กรณีการใช้งาน CHIPS ตัวอย่าง ได้แก่ สถานการณ์ใดๆ ที่ทรัพยากรย่อยข้ามเว็บไซต์ต้องมีแนวคิดเกี่ยวกับเซสชันหรือสถานะที่คงอยู่ซึ่งกำหนดขอบเขตไว้ที่กิจกรรมของผู้ใช้ในเว็บไซต์ระดับบนสุดเดียว เช่น
- แชทแบบฝังของบุคคลที่สาม
- การฝังแผนที่ของบุคคลที่สาม
- การฝังการชำระเงินของบุคคลที่สาม
- การจัดสรรภาระงาน CDN ของทรัพยากรย่อย
- ผู้ให้บริการ CMS แบบไม่มีส่วนหัว
- โดเมนแซนด์บ็อกซ์สำหรับการแสดงเนื้อหาของผู้ใช้ที่ไม่น่าเชื่อถือ (เช่น 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 คุกกี้ที่เลือกใช้การแบ่งพาร์ติชันจะมีคีย์ 2 รายการ ได้แก่ คีย์โฮสต์และคีย์พาร์ติชัน
คีย์การแบ่งพาร์ติชันของคุกกี้คือเว็บไซต์ (รูปแบบและโดเมนที่ลงทะเบียนได้) ของ URL ระดับบนสุดที่เบราว์เซอร์เข้าชมเมื่อเริ่มคำขอไปยังปลายทางที่ตั้งค่าคุกกี้
ในตัวอย่างก่อนหน้าซึ่งมีการฝัง https://support.chat.example
ใน https://retail.example
URL ระดับบนสุดคือ https://retail.example
ในกรณีนี้ คีย์พาร์ติชันคือ ("https", "retail.example")
ในทำนองเดียวกัน คีย์การแบ่งพาร์ติชันของคำขอคือเว็บไซต์ของ URL ระดับบนสุดที่เบราว์เซอร์เข้าชมเมื่อเริ่มคำขอ เบราว์เซอร์ต้องส่งคุกกี้ที่มีแอตทริบิวต์ Partitioned
ในคำขอที่มีคีย์พาร์ติชันเดียวกันกับคุกกี้นั้นเท่านั้น
คีย์คุกกี้ในตัวอย่างก่อนหน้าจะมีลักษณะดังนี้ก่อนและหลัง CHIPS

ก่อน CHIPS
key=("support.chat.example")
หลังจาก CHIPS
key={("support.chat.example"),("https", "retail.example")}
การออกแบบความปลอดภัย
CHIPS จะกำหนดและส่งคุกกี้ผ่านโปรโตคอลที่ปลอดภัยเท่านั้นเพื่อส่งเสริมแนวทางปฏิบัติที่ดีด้านความปลอดภัย
- ต้องตั้งค่าคุกกี้ที่แบ่งพาร์ติชันด้วย
Secure
- เราขอแนะนําให้ใช้คํานําหน้า
__Host-
เมื่อตั้งค่าคุกกี้ที่แบ่งพาร์ติชันเพื่อให้คุกกี้เชื่อมโยงกับชื่อโฮสต์ (ไม่ใช่โดเมนที่ลงทะเบียนได้)
ตัวอย่าง
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;
ทางเลือกแทน CHIPS
Storage Access API และชุดเว็บไซต์ที่เกี่ยวข้อง (RWS) ที่เชื่อมโยงกันเป็นกลไกของแพลตฟอร์มเว็บที่ช่วยให้เข้าถึงคุกกี้ข้ามเว็บไซต์แบบจำกัดได้เพื่อวัตถุประสงค์ที่เฉพาะเจาะจงซึ่งมุ่งเน้นผู้ใช้
ซึ่งเป็นทางเลือกแทนการแบ่งพาร์ติชัน CHIPS ในกรณีที่ต้องเข้าถึงคุกกี้ข้ามเว็บไซต์ที่ไม่ได้แบ่งพาร์ติชัน
พิจารณา Storage Access API และชุดเว็บไซต์ที่เกี่ยวข้องในกรณีที่คุณต้องการให้คุกกี้เดียวกันพร้อมใช้งานสำหรับบริการที่ฝังอยู่ในเว็บไซต์ที่เกี่ยวข้องหลายแห่ง
CHIPS ช่วยให้บริการสามารถทำหน้าที่เป็นคอมโพเนนต์ที่แยกจากกันในหลายเว็บไซต์ โดยไม่จำเป็นต้องใช้คุกกี้เดียวกันในหลายเว็บไซต์ หากบริการตั้งค่าคุกกี้ที่แบ่งพาร์ติชัน คีย์พาร์ติชันจะเป็นเว็บไซต์ระดับบนสุด และคุกกี้นั้นจะไม่พร้อมใช้งานสำหรับเว็บไซต์อื่นๆ ที่ใช้บริการเดียวกัน
การออกแบบชุดเว็บไซต์ที่เกี่ยวข้องใช้ Storage Access API และไม่ได้ผสานรวมกับการแบ่งพาร์ติชัน CHIPS หากคุณมี Use Case ที่ต้องใช้การแบ่งพาร์ติชันคุกกี้ที่แชร์ในเว็บไซต์ภายใน RWS โปรดระบุตัวอย่างและแสดงความคิดเห็นเกี่ยวกับปัญหาใน GitHub
สาธิต
การสาธิตนี้จะอธิบายวิธีการทำงานของคุกกี้ที่แบ่งพาร์ติชันและวิธีตรวจสอบคุกกี้ในเครื่องมือสำหรับนักพัฒนาเว็บ
เว็บไซต์ ก. ฝัง iframe จากเว็บไซต์ ข. ซึ่งใช้ JavaScript เพื่อตั้งค่าคุกกี้ 2 รายการ ได้แก่ คุกกี้ที่แบ่งพาร์ติชันและคุกกี้ที่ไม่ได้แบ่งพาร์ติชัน เว็บไซต์ ข แสดงคุกกี้ทั้งหมดที่เข้าถึงได้จากตำแหน่งนั้นโดยใช้ document.cookie
เมื่อมีการบล็อกคุกกี้ของบุคคลที่สาม เว็บไซต์ B จะตั้งค่าและเข้าถึงคุกกี้ที่มีแอตทริบิวต์ Partitioned
ได้ในบริบทข้ามเว็บไซต์เท่านั้น
เมื่ออนุญาตคุกกี้ของบุคคลที่สาม เว็บไซต์ B จะตั้งค่าและเข้าถึงคุกกี้ที่ไม่ได้แบ่งพาร์ติชันได้ด้วย

ข้อกำหนดเบื้องต้น
- Chrome 118 ขึ้นไป
- ไปที่
chrome://flags/#test-third-party-cookie-phaseout
แล้วเปิดใช้การตั้งค่านี้
ใช้เครื่องมือสำหรับนักพัฒนาเว็บเพื่อตรวจสอบคุกกี้ที่แบ่งพาร์ติชัน
- ไปที่ https://chips-site-a.glitch.me
- กด
Control+Shift+J
(หรือCommand+Option+J
บน Mac) เพื่อเปิด DevTools - คลิกแท็บแอปพลิเคชัน
- ไปที่แอปพลิเคชัน > พื้นที่เก็บข้อมูล > คุกกี้
- คลิก
https://chips-site-b.glitch.me
DevTools จะแสดงคุกกี้ทั้งหมดจากต้นทางที่เลือก

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

- คลิกไปที่เว็บไซต์ B
- ใน DevTools ให้ไปที่แอปพลิเคชัน > พื้นที่เก็บข้อมูล > คุกกี้
- คลิก
https://chips-site-b.glitch.me

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

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

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

ใน 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 ของเว็บไซต์ B จะเข้าถึงไม่ได้เมื่อฝังไว้ในเว็บไซต์ Aล้างคุกกี้
หากต้องการรีเซ็ตเดโม ให้ล้างคุกกี้ทั้งหมดสำหรับเว็บไซต์โดยทำดังนี้
- กด
Control+Shift+J
(หรือCommand+Option+J
บน Mac) เพื่อเปิด DevTools - คลิกแท็บแอปพลิเคชัน
- ไปที่แอปพลิเคชัน > พื้นที่เก็บข้อมูล > คุกกี้
- คลิกขวาที่
https://chips-site-b.glitch.me
- คลิกล้าง
แหล่งข้อมูล
- GitHub: อ่านคำอธิบาย ถามคำถาม และติดตามการสนทนา
- การสนับสนุนนักพัฒนาแอป: ถามคำถามและเข้าร่วมการสนทนาในที่เก็บการสนับสนุนนักพัฒนาแอป Privacy Sandbox