ดูวิธีตั้งค่าคุกกี้ของบุคคลที่หนึ่งเพื่อรักษาความปลอดภัย ความเข้ากันได้กับหลายเบราว์เซอร์ และลดโอกาสในการหยุดทำงานเมื่อมีการเลิกใช้งานคุกกี้ของบุคคลที่สาม
คุกกี้อาจเป็นบุคคลที่หนึ่งหรือบุคคลที่สามที่สัมพันธ์กับบริบทของผู้ใช้ก็ได้ โดยขึ้นอยู่กับเว็บไซต์ที่ผู้ใช้อยู่ในขณะนั้น หากโดเมนและสกีมที่จดทะเบียนได้ของคุกกี้ตรงกับหน้าระดับบนสุดปัจจุบัน นั่นคือสิ่งที่แสดงในแถบที่อยู่ของเบราว์เซอร์ ระบบจะถือว่าคุกกี้มาจากเว็บไซต์เดียวกันกับหน้าเว็บ และโดยทั่วไปจะเรียกว่าคุกกี้ของบุคคลที่หนึ่ง
โดยทั่วไปคุกกี้จากโดเมนอื่นที่ไม่ใช่เว็บไซต์ปัจจุบันจะเรียกว่าคุกกี้ของบุคคลที่สาม
สูตรคุกกี้ของบุคคลที่หนึ่งที่ดี
ตัวอย่างเช่น หากคุกกี้ที่คุณตั้งค่าไม่ได้ใช้งานข้ามเว็บไซต์ คุกกี้ดังกล่าวใช้เพื่อจัดการเซสชันบนเว็บไซต์ และไม่เคยใช้ใน iframe แบบข้ามเว็บไซต์ คุกกี้ดังกล่าวจะใช้ในบริบทของบุคคลที่หนึ่งเสมอ
โดยค่าเริ่มต้น คุกกี้สามารถแชร์ข้ามเว็บไซต์, เข้าถึงด้วย JavaScript และส่งผ่านการเชื่อมต่อ HTTP ซึ่งมาพร้อมกับความเสี่ยงด้านความเป็นส่วนตัวและความปลอดภัยบางประการ แม้ว่าจะดำเนินการปรับปรุงลักษณะการทำงานเริ่มต้นอย่างต่อเนื่อง แต่ผ่าน Privacy Sandbox และข้อเสนออื่นๆ เช่น คุกกี้ที่ผูกกับต้นทาง คุณยังทำสิ่งต่างๆ ได้มากมายด้วยการตั้งค่าแอตทริบิวต์เพิ่มเติมในคุกกี้
การกำหนดค่าต่อไปนี้เป็นแนวทางปฏิบัติแนะนำ เพื่อรักษาความปลอดภัยและความเข้ากันได้ระหว่างเบราว์เซอร์แบบต่างๆ สำหรับคุกกี้ของบุคคลที่หนึ่งส่วนใหญ่ โดยจะเป็นการสร้างรากฐานที่ปลอดภัย ซึ่งคุณปรับเปลี่ยนเพื่อเปิดสิทธิ์ได้เฉพาะเมื่อจำเป็นเท่านั้น บทความนี้ยังครอบคลุมถึงสูตรอาหารรูปแบบต่างๆ สำหรับกรณีการใช้งานบางอย่างด้วย
สูตร
Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Host
คือคำนำหน้าที่ไม่บังคับซึ่งทำให้แอตทริบิวต์บางรายการเป็นแอตทริบิวต์ที่ต้องระบุและห้ามแอตทริบิวต์อื่นๆ ดังนี้
- ต้องมี
Secure
- ต้องระบุ
Domain
Path
ต้องเป็น/
เมื่อเพิ่ม Host
แล้ว คุณสามารถใช้เบราว์เซอร์เพื่อตรวจสอบว่าแอตทริบิวต์เหล่านี้ได้รับการตั้งค่าตามกฎ __Host
หรือไม่ และปฏิเสธคุกกี้หากไม่มีการตั้งค่า
Secure
ปกป้องคุกกี้จากการถูกขโมยในเครือข่ายที่ไม่ปลอดภัยเนื่องจากอนุญาตให้ส่งคุกกี้ผ่านการเชื่อมต่อ HTTPS เท่านั้น หากคุณยังไม่ได้ย้ายข้อมูลเว็บไซต์ไปยัง HTTPS อย่างสมบูรณ์ ให้เพิ่มลำดับความสำคัญ
แอตทริบิวต์ Domain
ระบุโฮสต์ที่สามารถรับคุกกี้ได้ การไม่ระบุคุกกี้จะจำกัดคุกกี้ไว้ที่โฮสต์เอกสารปัจจุบันเท่านั้น โดยไม่รวมโดเมนย่อย: คุกกี้สำหรับ example.com
จะส่งในทุกคำขอไปยัง example.com
แต่ไม่ส่งในคำขอที่ส่งไปยัง images.example.com
หากคุณมีแอปต่างๆ ที่ทำงานอยู่ในโดเมนย่อยที่ต่างกัน วิธีนี้จะช่วยลดความเสี่ยงที่โดเมนหนึ่งถูกบุกรุก ซึ่งอนุญาตให้เข้าโดเมนอื่นๆ ได้
Path
ระบุเส้นทางที่ต้องมีใน URL ที่ขอเพื่อให้เบราว์เซอร์ส่งส่วนหัว Cookie
การตั้งค่า Path=/
หมายความว่าระบบจะส่งคุกกี้ไปยังเส้นทาง URL ทั้งหมดในโดเมนนั้น การรวมกันของทั้ง Domain
กับ Path=/
จะทำให้คุกกี้ผูกกับต้นทางใกล้เคียงกันมากที่สุด คุกกี้จึงทำงานคล้ายกับพื้นที่เก็บข้อมูลฝั่งไคลเอ็นต์อื่นๆ เช่น LocalStorage
จึงไม่สับสนว่า example.com/a
อาจได้รับค่าที่ต่างจาก example.com/b
แอตทริบิวต์ HttpOnly
จะเพิ่มการป้องกันสคริปต์ของบุคคลที่สามที่เป็นอันตรายในเว็บไซต์ด้วยการจำกัดการเข้าถึง JavaScript ซึ่งทำให้ส่งคุกกี้ได้ในส่วนหัวของคำขอเท่านั้น และทำให้คุกกี้ไม่พร้อมใช้งานกับ JavaScript โดยใช้ document.cookie
Max-Age
จำกัดอายุการใช้งานของคุกกี้เนื่องจากเซสชันของเบราว์เซอร์อาจใช้เวลานานพอสมควร และคุณไม่ต้องการให้มีคุกกี้ที่ไม่อัปเดตค้างอยู่ตลอดไป เหมาะสำหรับคุกกี้ระยะสั้น เช่น เซสชันผู้ใช้ หรือคุกกี้ที่สั้นลงอย่างโทเค็นสำหรับการส่งแบบฟอร์ม Max-Age
กำหนดไว้เป็นวินาที และในตัวอย่างก่อนหน้านี้กำหนดไว้เป็น 7776000 วินาที ซึ่งเท่ากับ 90 วัน ตัวเลือกนี้เป็นค่าเริ่มต้นที่สมเหตุสมผล ซึ่งคุณเปลี่ยนแปลงได้ตามกรณีการใช้งาน
SameSite=Lax
จำกัดให้ส่งคุกกี้ในคำขอเดียวกันเท่านั้น กล่าวคือ เมื่อคำขอตรงกับบริบทการท่องเว็บในปัจจุบัน นั่นคือเว็บไซต์ระดับบนสุดที่ผู้ใช้กำลังเข้าชมซึ่งแสดงในแถบตำแหน่ง SameSite=Lax
คือค่าเริ่มต้นในเบราว์เซอร์สมัยใหม่ แต่แนวทางปฏิบัติที่ดีคือการระบุให้มีความสามารถในการใช้งานร่วมกันบนเบราว์เซอร์ต่างๆ ซึ่งอาจมีค่าเริ่มต้นที่แตกต่างกัน การทำเครื่องหมายอย่างชัดแจ้งว่าคุกกี้เป็นเว็บไซต์เดียวกันเท่านั้น จะเป็นการจำกัดคุกกี้นั้นเฉพาะในบริบทของบุคคลที่หนึ่ง และคุณไม่ควรต้องทำการเปลี่ยนแปลงกับคุกกี้นั้นเมื่อคุกกี้ของบุคคลที่สามหายไปแล้ว
ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์ต่างๆ ของคุกกี้ได้จากเอกสารประกอบ Set-Cookie
เกี่ยวกับ MDN
สูตรคุกกี้ของบุคคลที่หนึ่งสำหรับเว็บไซต์ที่มีโดเมนย่อย
หากคุณมีเว็บไซต์ที่มีโดเมนย่อยและต้องการให้มีเซสชันเดียวในทุกเว็บไซต์ คำนำหน้า Host
อาจจำกัดมากเกินไป ตัวอย่างเช่น news.site
อาจมีโดเมนย่อยสำหรับหัวข้อ เช่น finance.news.site
และ sport.news.site
และคุณต้องการให้มีเซสชันผู้ใช้ 1 เซสชันในทุกหัวข้อ ในกรณีดังกล่าว ให้ใช้คำนำหน้า __Secure
แทน __Host
และระบุ Domain
สูตร
Set-Cookie:
__Secure-cookie-name=cookie-value;
Secure;
Domain=news.site;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Secure
เป็นคำนำหน้าที่ไม่บังคับซึ่งยืนยันข้อกำหนดน้อยกว่า Host
: กำหนดให้คุกกี้ตั้งค่าด้วยแอตทริบิวต์ Secure
เท่านั้น
การจำกัดการเข้าถึงคุกกี้ของบุคคลที่หนึ่งในคำขอที่เริ่มต้นจากเว็บไซต์ของบุคคลที่สาม
แม้ว่าจะไม่มีการส่งคุกกี้ SameSite=Lax
ในคำขอย่อยข้ามเว็บไซต์ (เช่น เมื่อโหลดรูปภาพที่ฝังหรือ iframe ในเว็บไซต์ของบุคคลที่สาม) ระบบจะส่งคุกกี้เมื่อผู้ใช้ไปยังเว็บไซต์ต้นทาง (เช่น เมื่อติดตามลิงก์จากเว็บไซต์อื่น)
คุณยังจำกัดการเข้าถึงคุกกี้และไม่อนุญาตให้ส่งคุกกี้พร้อมกับคำขอที่เริ่มต้นจากเว็บไซต์บุคคลที่สามด้วย SameSite=Strict
ได้ด้วย วิธีนี้มีประโยชน์เมื่อคุณมีคุกกี้ที่เกี่ยวข้องกับฟังก์ชันการทำงานซึ่งจะอยู่เบื้องหลังการนำทางเริ่มต้นเสมอ เช่น การเปลี่ยนรหัสผ่านหรือการซื้อ
สูตร
Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Strict;