คุกกี้ทุกรายการมีคู่คีย์-ค่าพร้อมกับแอตทริบิวต์จำนวนหนึ่งที่ ควบคุมเวลาและสถานที่ที่ใช้คุกกี้
การแนะนำแอตทริบิวต์ SameSite
(ระบุไว้ใน
RFC6265bis)
ช่วยให้คุณประกาศว่าคุกกี้ถูกจำกัดสำหรับบุคคลที่หนึ่งหรือ
เนื้อหาในเว็บไซต์เดียวกัน การเข้าใจว่า 'เว็บไซต์' ใด หมายความที่นี่
เว็บไซต์นี้ประกอบด้วยส่วนต่อท้ายโดเมนและส่วนของโดเมน
ข้างหน้า ตัวอย่างเช่น โดเมน www.web.dev
เป็นส่วนหนึ่งของเว็บไซต์ web.dev
คีย์เวิร์ด: หากผู้ใช้อยู่ใน www.web.dev
และขอรูปภาพจาก
static.web.dev
คำขอนี้เป็นคำขอแบบเว็บไซต์เดียวกัน
รายการคำต่อท้ายสาธารณะจะกำหนดหน้าที่นับเป็นหน้า
การใช้เว็บไซต์เดียวกัน ไม่ได้ใช้เพียงแค่โดเมนระดับบนสุด เช่น .com
แต่อาจรวมถึงบริการต่างๆ เช่น github.io
วิธีนี้ช่วยให้
your-project.github.io
และ my-project.github.io
เพื่อนับเป็นเว็บไซต์แยกกัน
คีย์เวิร์ด: หากผู้ใช้อยู่ใน your-project.github.io
และขอรูปภาพจาก
my-project.github.io
นั้นเป็นคำขอแบบข้ามเว็บไซต์
ใช้แอตทริบิวต์ SameSite
เพื่อประกาศการใช้คุกกี้
แอตทริบิวต์ SameSite
ในคุกกี้มีวิธีการควบคุม 3 วิธีที่แตกต่างกัน
พฤติกรรมนี้ คุณสามารถเลือกที่จะไม่ระบุแอตทริบิวต์ หรือจะใช้
Strict
หรือ Lax
เพื่อจำกัดคุกกี้ให้อยู่ในคำขอเดียวกันในเว็บไซต์
หากคุณตั้งค่า SameSite
เป็น Strict
คุกกี้ของคุณจะส่งได้ใน
บริบทของบุคคลที่หนึ่ง กล่าวคือ หากเว็บไซต์สำหรับคุกกี้ตรงกับเว็บไซต์ที่แสดง
ในแถบที่อยู่ของเบราว์เซอร์ ดังนั้น หากตั้งค่าคุกกี้ promo_shown
ดังนี้
Set-Cookie: promo_shown=1; SameSite=Strict
เมื่อผู้ใช้อยู่ในเว็บไซต์ของคุณ คุกกี้จะส่งพร้อมกับคำขอตามที่คาดไว้
อย่างไรก็ตาม หากผู้ใช้ติดตามลิงก์จากอีกลิงก์หนึ่งมายังเว็บไซต์ของคุณ คุกกี้
ไม่ได้ส่งคำขอเริ่มต้นนั้น
วิธีนี้เหมาะสำหรับคุกกี้ที่เกี่ยวข้องกับฟีเจอร์ที่อยู่เบื้องหลังการเริ่มต้นเสมอ
เช่น การเปลี่ยนรหัสผ่านหรือทำการซื้อ
การจำกัดสำหรับคุกกี้ เช่น promo_shown
หากผู้อ่านไปตามลิงก์
ในเว็บไซต์ ลูกค้าต้องการให้ส่งคุกกี้เพื่อให้มีการนำค่ากำหนดของตนไปใช้
SameSite=Lax
อนุญาตให้เบราว์เซอร์ส่งคุกกี้ที่มีระดับบนสุดเหล่านี้
การนำทาง ตัวอย่างเช่น หากเว็บไซต์อื่นอ้างอิงถึงเนื้อหาของเว็บไซต์ของคุณใน
โดยใช้รูปภาพแมวของคุณและให้ลิงก์ไปยังบทความของคุณเป็น
ดังต่อไปนี้:
<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>
เมื่อตั้งค่าคุกกี้เป็น Lax
ดังนี้
Set-Cookie: promo_shown=1; SameSite=Lax
เมื่อเบราว์เซอร์ขอ amazing-cat.png
สำหรับบล็อกของคนอื่น การตั้งค่า
ไม่ส่งคุกกี้ แต่เมื่อผู้อ่านติดตาม
ลิงก์ไปยัง cat.html
ในเว็บไซต์ของคุณ คำขอดังกล่าวมีคุกกี้
เราขอแนะนำให้ใช้ SameSite
ในลักษณะนี้โดยตั้งค่าคุกกี้ที่ส่งผลต่อเว็บไซต์
แสดงกับ Lax
และคุกกี้ที่เกี่ยวข้องกับการดำเนินการของผู้ใช้กับ Strict
คุณยังสามารถตั้งค่า SameSite
เป็น None
เพื่อระบุว่าคุณต้องการให้ใช้คุกกี้
ที่ส่งในทุกบริบท หากคุณให้บริการที่เว็บไซต์อื่นใช้ เช่น
วิดเจ็ต เนื้อหาที่ฝัง โปรแกรมแอฟฟิลิเอต การโฆษณา หรือการลงชื่อเข้าใช้
หลายเว็บไซต์ ให้ใช้ None
เพื่อให้แสดงเจตนาได้อย่างชัดเจน
การเปลี่ยนแปลงการทำงานเริ่มต้นที่ไม่ได้ใช้ SameSite
การรองรับเบราว์เซอร์
แอตทริบิวต์ SameSite
ได้รับการรองรับอย่างกว้างขวาง แต่ยังไม่มีการนำไปใช้อย่างแพร่หลาย
ก่อนหน้านี้ การตั้งค่าคุกกี้โดยไม่มี SameSite
จะเป็นการกำหนดค่าเริ่มต้นให้ส่งคุกกี้เข้ามา
บริบททั้งหมด ซึ่งทำให้ผู้ใช้มีความเสี่ยงต่อ CSRF และไม่ได้ตั้งใจ
การรั่วไหลของข้อมูล เพื่อกระตุ้นให้นักพัฒนาแอประบุความตั้งใจของตน
และมอบประสบการณ์การใช้งานที่ปลอดภัยกว่า นั่นก็คือ IETF
คุกกี้ที่ดีขึ้นทีละน้อย
ระบุการเปลี่ยนแปลงที่สำคัญ 2 ประการ:
- คุกกี้ที่ไม่มีแอตทริบิวต์
SameSite
จะถือว่าเป็นSameSite=Lax
- คุกกี้ที่มี
SameSite=None
จะต้องระบุSecure
ด้วย ซึ่งหมายความว่า บริบทที่ปลอดภัย
การเปลี่ยนแปลงทั้ง 2 อย่างนี้สามารถทำงานร่วมกับเบราว์เซอร์ที่มี
ใช้แอตทริบิวต์ SameSite
เวอร์ชันก่อนหน้า รวมถึง
เบราว์เซอร์ที่ไม่รองรับ SameSite
เวอร์ชันก่อนหน้า ซึ่งมีจุดมุ่งหมายเพื่อ
ลดจำนวนนักพัฒนา การใช้เบราว์เซอร์" การทำงานเริ่มต้นโดยทำให้คุกกี้
พฤติกรรมและการใช้งานที่มีเจตนาอย่างโจ่งแจ้ง ไคลเอ็นต์ที่ไม่รู้จัก
SameSite=None
จะไม่ต้องสนใจข้อความนี้
SameSite=Lax
โดยค่าเริ่มต้น
หากคุณส่งคุกกี้โดยไม่ระบุแอตทริบิวต์ SameSite
ของคุกกี้นั้น เบราว์เซอร์
จะปฏิบัติต่อคุกกี้นั้นเสมือนว่ามีการตั้งค่าเป็น SameSite=Lax
เรายังคงแนะนำ
ตั้งค่า SameSite=Lax
อย่างชัดเจนเพื่อทำให้ประสบการณ์ของผู้ใช้สอดคล้องกันมากขึ้น
ในเบราว์เซอร์ต่างๆ
SameSite=None
ต้องปลอดภัย
เมื่อสร้างคุกกี้ข้ามเว็บไซต์โดยใช้ SameSite=None
คุณต้องตั้งค่าคุกกี้เหล่านั้นด้วย
เป็น Secure
เพื่อให้เบราว์เซอร์ยอมรับ:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
คุณสามารถทดสอบลักษณะการทำงานนี้ได้ใน Chrome 76 โดยเปิดใช้
about://flags/#cookies-without-same-site-must-be-secure
และจาก Firefox 69
โดยการตั้งค่า network.cookie.sameSite.noneRequiresSecure
ใน
about:config
นอกจากนี้ เราขอแนะนำให้อัปเดตคุกกี้ที่มีอยู่เป็น Secure
โดยเร็วที่สุด
หากคุณใช้บริการที่แสดงเนื้อหาของบุคคลที่สามในเว็บไซต์ โปรดตรวจสอบว่า
ผู้ให้บริการของคุณอัปเดตคุกกี้ และอัปเดตตัวอย่างข้อมูลหรือ
ทรัพยากร Dependency ในเว็บไซต์ของคุณเพื่อให้แน่ใจว่าเว็บไซต์จะใช้ลักษณะการทำงานแบบใหม่
สูตรคุกกี้ SameSite
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการอัปเดตคุกกี้เพื่อจัดการกับคุกกี้เหล่านี้ให้สำเร็จ
การเปลี่ยนแปลงใน SameSite=None
และความแตกต่างของลักษณะการทำงานของเบราว์เซอร์ โปรดดู
บทความติดตามผล สูตรคุกกี้ SameSite
ขอบคุณสำหรับการมีส่วนร่วมและความคิดเห็นจาก Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner และ Vivek Sekhar
รูปภาพหลักของคุกกี้โดย พิล-รีน พริสเก ในวันที่ หน้าจอแนะนํา