เตรียมตัวให้พร้อมสำหรับการตั้งค่าคุกกี้ปลอดภัยใหม่ SameSite=None

วันพฤหัสบดีที่ 16 มกราคม 2020

โพสต์นี้เป็นการโพสต์ข้ามผลิตภัณฑ์จากบล็อกนักพัฒนาซอฟต์แวร์ Chromium และเป็นโพสต์ที่เกี่ยวข้องโดยเฉพาะว่าการเปลี่ยนแปลงที่เกิดขึ้นกับ Chrome อาจส่งผลต่อการทํางานของเว็บไซต์ของคุณอย่างไรในอนาคต

ในเดือนพฤษภาคม Chrome ได้ประกาศโมเดลความปลอดภัยโดยค่าเริ่มต้นสำหรับคุกกี้ ซึ่งเปิดใช้โดยระบบการแยกประเภทคุกกี้แบบใหม่ (spec) โครงการริเริ่มนี้เป็นส่วนหนึ่งของความพยายามอย่างต่อเนื่องของเราในการปรับปรุงความเป็นส่วนตัวและความปลอดภัยในเว็บ

Chrome วางแผนที่จะใช้โมเดลใหม่นี้กับ Chrome 80 ในเดือนกุมภาพันธ์ 2020 Mozilla และ Microsoft ก็แสดงความตั้งใจที่จะใช้โมเดลใหม่ใน Firefox และ Edge ตามไทม์ไลน์ของตนเองด้วยเช่นกัน ถึงการเปลี่ยนแปลงของ Chrome จะเกิดขึ้นในอีก 2-3 เดือนข้างหน้า นักพัฒนาซอฟต์แวร์ที่จัดการคุกกี้ก็จะต้องประเมินความพร้อมเสียตั้งแต่วันนี้ บล็อกโพสต์นี้จะอธิบายแนวคิดนี้ในระดับที่ลงรายละเอียด โปรดดูคำแนะนำสำหรับนักพัฒนาซอฟต์แวร์ในบทความ SameSite Cookie Explained ของ web.dev

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

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

โดเมนของเว็บไซต์ไม่ตรงกับโดเมนของคุกกี้

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

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

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

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

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

เพื่อปกป้องเว็บไซต์และผู้ใช้เว็บไซต์มากขึ้น โมเดลความปลอดภัยโดยค่าเริ่มต้นแบบใหม่นี้จะคิดไว้ก่อนว่าคุกกี้ทั้งหมดควรได้รับการปกป้องไม่ให้มีการเข้าถึงจากภายนอก เว้นแต่ว่าระบุไว้เป็นอย่างอื่น นักพัฒนาซอฟต์แวร์ต้องใช้แอตทริบิวต์ SameSite=None ซึ่งเป็นการตั้งค่าคุกกี้ใหม่เพื่อกำหนดคุกกี้ที่อนุญาตให้เข้าถึงแบบข้ามเว็บไซต์ได้ เมื่อมีแอตทริบิวต์ SameSite=None อยู่ คุณต้องใช้แอตทริบิวต์ Secure เพิ่มเติมเพื่อให้คุกกี้ข้ามเว็บไซต์สามารถเข้าถึงได้ผ่านการเชื่อมต่อ HTTPS เท่านั้น ถึงวิธีนี้จะไม่ช่วยลดความเสี่ยงทั้งหมดที่เกิดจากการเข้าถึงแบบข้ามเว็บไซต์ แต่ก็จะช่วยป้องกันการโจมตีเครือข่ายได้

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

การบังคับใช้ของ Chrome จะเริ่มในเดือนกุมภาพันธ์ 2020

เมื่อเริ่มใช้ Chrome 80 ในเดือนกุมภาพันธ์ Chrome จะปฏิบัติต่อคุกกี้ที่ไม่ได้ประกาศค่า SameSite ว่าเป็นคุกกี้ SameSite=Lax เฉพาะคุกกี้ที่มี SameSite=None การตั้งค่าแอตทริบิวต์ Secure เท่านั้นที่สามารถเข้าถึงจากภายนอกได้ โดยต้องเป็นการเข้าถึงจากการเชื่อมต่อที่ปลอดภัย ตัวติดตามสถานะแพลตฟอร์ม Chrome สําหรับ SameSite=None และ Secure จะยังได้รับการอัปเดตข้อมูลการเปิดตัวล่าสุดต่อไป

Mozilla ได้ยืนยันการรองรับโมเดลการจัดประเภทคุกกี้แบบใหม่แล้ว โดยมีความตั้งใจที่จะใช้ SameSite=None รวมถึงข้อกําหนดที่ต้องใช้ แอตทริบิวต์ Secure สําหรับคุกกี้ข้ามเว็บไซต์ใน Firefox ด้วย เมื่อไม่นานมานี้ Microsoft ก็ได้ประกาศแผนการใช้โมเดลนี้โดยเริ่มต้นที่การทดสอบใน Microsoft Edge 80 ด้วยเช่นกัน

วิธีเตรียมความพร้อมและความซับซ้อนเท่าที่ทราบ

หากคุณจัดการคุกกี้ข้ามเว็บไซต์ คุณจะต้องใช้ SameSite=None และการตั้งค่าแอตทริบิวต์ Secure กับคุกกี้เหล่านั้น การใช้งานสําหรับนักพัฒนาซอฟต์แวร์ส่วนใหญ่ไม่น่าจะมีความซับซ้อน แต่ขอแนะนำอย่างยิ่งให้คุณเริ่มการทดสอบเลยเพื่อดูว่ามีความซับซ้อนและกรณีพิเศษอะไรเกิดขึ้นหรือไม่ เช่นกรณีดังต่อไปนี้

  • บางภาษาและไลบรารียังไม่รองรับค่า "None" ซึ่งทําให้นักพัฒนาซอฟต์แวร์ต้องตั้งค่าส่วนหัวคุกกี้โดยตรง ที่เก็บข้อมูลของ GitHub นี้แสดงวิธีการนํา SameSite=None ไปใช้งาน และการตั้งค่าแอตทริบิวต์ Secure ในภาษา ไลบรารี และเฟรมเวิร์กที่หลากหลาย
  • บางเบราว์เซอร์อย่างเช่น Chrome, Safari และ UC บางเวอร์ชันอาจจัดการกับค่า None ด้วยวิธีที่ไม่ได้ตั้งใจ ซึ่งทําให้นักพัฒนาซอฟต์แวร์ต้องเขียนโค้ดข้อยกเว้นสําหรับไคลเอ็นต์เหล่านั้น ซึ่งรวมถึง Android WebView ที่ขับเคลื่อนโดย Chrome เวอร์ชันเก่าๆ รายการไคลเอ็นต์ที่ใช้ร่วมกันไม่ได้เท่าที่ทราบมีดังนี้
  • ขอแนะนําให้นักพัฒนาแอปประกาศการตั้งค่า SameSite cookie ที่เหมาะสมสําหรับ Android WebViews โดยอิงตามเวอร์ชันของ Chrome ที่เข้ากันได้กับค่า None ทั้งสําหรับคุกกี้ที่เข้าถึงผ่านส่วนหัว HTTP(S) และผ่าน CookieManager API ของ Android WebView อย่างไรก็ตาม ยังไม่มีการบังคับใช้โมเดลใหม่ใน Android WebView ในตอนนี้
  • ผู้ดูแลระบบไอทีขององค์กรอาจต้องใช้นโยบายพิเศษเพื่อเปลี่ยนเบราว์เซอร์ Chrome ไปเป็นการทํางานเดิมชั่วคราว หากบริการบางอย่าง เช่น การลงชื่อเพียงครั้งเดียวหรือหากแอปพลิเคชันภายในยังไม่พร้อมสําหรับการเปิดตัวในเดือนกุมภาพันธ์
  • หากมีคุกกี้ที่เข้าถึงได้ทั้งในบริบทของบุคคลที่หนึ่งและบุคคลที่สาม คุณอาจพิจารณาใช้คุกกี้แยกต่างหากเพื่อประโยชน์ด้านความปลอดภัยของ SameSite=Lax ในบริบทของบุคคลที่หนึ่ง

คําอธิบายเกี่ยวกับคุกกี้ SameSite มีคำแนะนำเฉพาะสำหรับสถานการณ์ข้างต้น รวมถึงช่องทางในการแจ้งปัญหาที่เกิดขึ้นและไขข้อสงสัย

หากต้องการทดสอบผลของลักษณะการทํางานใหม่ของ Chrome ที่มีต่อเว็บไซต์หรือคุกกี้ที่คุณจัดการ โปรดไปที่ chrome://flags ใน Chrome 76 ขึ้นไปแล้วเปิดใช้การทดสอบ "SameSite by default cookies" และ "Cookies without SameSite must be secure" นอกจากนี้ การทดสอบเหล่านี้ยังจะเปิดใช้โดยอัตโนมัติสำหรับผู้ใช้กลุ่มย่อยของ Chrome 79 รุ่นเบต้าด้วย ผู้ใช้รุ่นเบต้าบางรายที่เปิดใช้การทดสอบอาจประสบปัญหาความเข้ากันไม่ได้กับบริการที่ยังไม่รองรับโมเดลใหม่นี้ ทั้งนี้ ผู้ใช้สามารถเลือกออกจากการทดสอบเบต้าได้โดยไปที่ chrome://flags และปิดใช้การทดสอบ

หากคุณจัดการคุกกี้ที่เข้าถึงได้เฉพาะบริบทของเว็บไซต์เดียวกัน (คุกกี้ในเว็บไซต์เดียวกัน) คุณก็ไม่จําเป็นต้องดําเนินการใดๆ Chrome จะป้องกันไม่ให้เอนทิตีภายนอกเข้าถึงคุกกี้เหล่านั้นโดยอัตโนมัติ แม้ว่าจะไม่มีแอตทริบิวต์ SameSite หรือไม่มีการตั้งค่าก็ตาม อย่างไรก็ตาม เราขอแนะนําอย่างยิ่งให้คุณใช้ค่า SameSite ที่เหมาะสม (Lax หรือ Strict) และไม่ควรพึ่งลักษณะการทํางานเริ่มต้นของเบราว์เซอร์ เนื่องจากจะมีบางเบราว์เซอร์ที่ไม่ได้ปกป้องคุกกี้ของเว็บไซต์เดียวกันโดยค่าเริ่มต้น

สุดท้ายนี้ หากคุณกังวลเรื่องความพร้อมของผู้ให้บริการและผู้อื่นที่ให้บริการเว็บไซต์ของคุณอยู่ ก็สามารถตรวจสอบคำเตือนได้จากคอนโซลเครื่องมือสําหรับนักพัฒนาซอฟต์แวร์ใน Chrome 77 ขึ้นไป เมื่อหน้าเว็บใดๆ ที่มีคุกกี้ข้ามเว็บไซต์แต่ไม่ได้ตั้งค่าที่จําเป็น

คุกกี้ที่เชื่อมโยงกับทรัพยากรแบบข้ามเว็บไซต์ใน (โดเมนของคุกกี้) มีการตั้งค่าโดยไม่มีแอตทริบิวต์ "SameSite"

ผู้ให้บริการบางราย (รวมถึงบริการบางอย่างของ Google) จะนําการเปลี่ยนแปลงที่จําเป็นไปใช้ในช่วงหลายเดือนก่อนที่จะมีการเปลี่ยนไปใช้ Chrome 80 ในเดือนกุมภาพันธ์ คุณอาจต้องติดต่อพาร์ทเนอร์เพื่อตรวจสอบความพร้อม