ไซต์เดียวกันที่มีแผน

คำจำกัดความของ "เว็บไซต์เดียวกัน" กำลังพัฒนาให้รวมรูปแบบ URL ด้วย ดังนั้นลิงก์ระหว่างเว็บไซต์เวอร์ชัน HTTP และ HTTPS จะนับเป็นคำขอข้ามเว็บไซต์แล้ว อัปเกรดเป็น HTTPS โดยค่าเริ่มต้นเพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้น หรืออ่านรายละเอียดเกี่ยวกับค่าแอตทริบิวต์ SameSite ที่จำเป็น

Steven Bingler
Steven Bingler

Schemeful Same-Site จะแก้ไขคำจำกัดความของเว็บไซต์ (เว็บ) จากโดเมนที่จดทะเบียนได้เท่านั้นเป็น รูปแบบ + โดเมนที่จดทะเบียนได้ ดูรายละเอียดและตัวอย่างเพิ่มเติมได้ใน หัวข้อทำความเข้าใจ "เว็บไซต์เดียวกัน" และ "ต้นทางเดียวกัน"

ข่าวดีก็คือ หากเว็บไซต์ของคุณอัปเกรดเป็น HTTPS อย่างสมบูรณ์แล้ว คุณก็ไม่ต้องกังวลใดๆ เพราะไม่มีอะไรเปลี่ยนแปลงสำหรับคุณ

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

คุณสามารถเปิดใช้การเปลี่ยนแปลงเหล่านี้เพื่อทดสอบในทั้ง Chrome และ Firefox

  • ใน Chrome เวอร์ชัน 86 ขึ้นไป ให้เปิดใช้ about://flags/#schemeful-same-site ติดตามความคืบหน้า ในหน้าสถานะของ Chrome
  • ใน Firefox เวอร์ชัน 79 ขึ้นไป ให้ตั้งค่า network.cookie.sameSite.schemeful เป็น true ผ่าน about:config ติดตามความคืบหน้าโดยใช้ ปัญหา Bugzilla

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

สถานการณ์ที่พบบ่อยในการใช้รูปแบบที่แตกต่างกัน

ก่อนหน้านี้ การนำทางระหว่างเว็บไซต์เวอร์ชันข้ามรูปแบบ (เช่น การลิงก์จาก http://site.example ไปยัง https://site.example) จะอนุญาตให้ส่งคุกกี้ได้ SameSite=Strict แต่ตอนนี้ระบบจะถือว่าเป็นการนำทางข้ามเว็บไซต์ ซึ่งหมายความว่าจะมีการบล็อกคุกกี้ SameSite=Strict

การไปยังส่วนต่างๆ ข้ามสคีมาที่ทริกเกอร์โดยการคลิกลิงก์ในเว็บไซต์เวอร์ชัน HTTP ที่ไม่ปลอดภัยไปยังเวอร์ชัน HTTPS ที่ปลอดภัย คุกกี้ SameSite=Strict ถูกบล็อก คุกกี้ SameSite=Lax และ SameSite=None; Secure ได้รับอนุญาต
การนำทางข้ามรูปแบบจาก HTTP ไปยัง HTTPS
HTTP → HTTPS HTTPS → HTTP
SameSite=Strict ⛔ บล็อก ⛔ บล็อก
SameSite=Lax ✓ อนุญาต ✓ อนุญาต
SameSite=None;Secure ✓ อนุญาต ⛔ บล็อก

การโหลดทรัพยากรย่อย

การเปลี่ยนแปลงใดๆ ที่คุณทำที่นี่ควรพิจารณาเป็นเพียงการแก้ไขชั่วคราวในขณะที่คุณพยายามอัปเกรดเป็น HTTPS อย่างสมบูรณ์

ตัวอย่างทรัพยากรย่อย ได้แก่ รูปภาพ, iframe และคำขอเครือข่ายที่สร้างด้วย XHR หรือ Fetch

ก่อนหน้านี้ การโหลดทรัพยากรย่อยข้ามรูปแบบในหน้าเว็บจะอนุญาตให้ส่งหรือตั้งค่าคุกกี้ SameSite=Strict หรือ SameSite=Lax ได้ แต่ตอนนี้ระบบจะถือว่าเป็นการโหลดทรัพยากรย่อยของบุคคลที่สามหรือข้ามเว็บไซต์อื่นๆ ซึ่งหมายความว่าจะมีการบล็อกคุกกี้ SameSite=Strict หรือ SameSite=Lax

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

ทรัพยากรย่อยข้ามสคีมาที่เกิดจากทรัพยากรจากเว็บไซต์เวอร์ชัน HTTPS ที่ปลอดภัยซึ่งรวมอยู่ในเวอร์ชัน HTTP ที่ไม่ปลอดภัย คุกกี้ SameSite=Strict และ SameSite=Lax ถูกบล็อก และอนุญาตคุกกี้ SameSite=None; Secure
หน้า HTTP ที่มีทรัพยากรย่อยข้ามรูปแบบผ่าน HTTPS
HTTP → HTTPS HTTPS → HTTP
SameSite=Strict ⛔ บล็อก ⛔ บล็อก
SameSite=Lax ⛔ บล็อก ⛔ บล็อก
SameSite=None;Secure ✓ อนุญาต ⛔ บล็อก

การ POST แบบฟอร์ม

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

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

การส่งแบบฟอร์มข้ามสคีมาซึ่งเกิดจากแบบฟอร์มในเว็บไซต์เวอร์ชัน HTTP ที่ไม่ปลอดภัยที่ส่งไปยังเวอร์ชัน HTTPS ที่ปลอดภัย คุกกี้ SameSite=Strict และ SameSite=Lax ถูกบล็อก และอนุญาตคุกกี้ SameSite=None; Secure
การส่งแบบฟอร์มข้ามรูปแบบจาก HTTP ไปยัง HTTPS
HTTP → HTTPS HTTPS → HTTP
SameSite=Strict ⛔ บล็อก ⛔ บล็อก
SameSite=Lax ⛔ บล็อก ⛔ บล็อก
SameSite=None;Secure ✓ อนุญาต ⛔ บล็อก

ฉันจะทดสอบเว็บไซต์ได้อย่างไร

เครื่องมือสำหรับนักพัฒนาเว็บและการแสดงข้อความมีให้บริการใน Chrome และ Firefox

ใน Chrome เวอร์ชัน 86 ขึ้นไป แท็บปัญหาใน เครื่องมือสำหรับนักพัฒนาเว็บจะ รวมปัญหา Schemeful Same-Site คุณอาจเห็นปัญหาต่อไปนี้ที่ไฮไลต์ไว้สำหรับเว็บไซต์

ปัญหาการนำทาง

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

ปัญหาการโหลดทรัพยากรย่อย

  • "ย้ายข้อมูลทั้งหมดไปใช้ HTTPS เพื่อให้ระบบส่งคุกกี้ไปยังทรัพยากรย่อยของเว็บไซต์เดียวกันต่อไปได้" หรือ "ย้ายข้อมูลทั้งหมดไปใช้ HTTPS เพื่อให้ทรัพยากรย่อยของเว็บไซต์เดียวกันตั้งค่าคุกกี้ต่อไปได้" - คำเตือนว่าระบบจะ บล็อกคุกกี้ใน Chrome เวอร์ชันถัดไป
  • "ย้ายข้อมูลทั้งหมดไปใช้ HTTPS เพื่อให้ระบบส่งคุกกี้ไปยังทรัพยากรย่อยของเว็บไซต์เดียวกันได้" หรือ "ย้ายข้อมูลทั้งหมดไปใช้ HTTPS เพื่อให้ทรัพยากรย่อยของเว็บไซต์เดียวกันตั้งค่าคุกกี้ได้" - คำเตือนว่าระบบได้ บล็อกคุกกี้แล้ว คำเตือนหลังยังอาจปรากฏขึ้นเมื่อมีการ POST แบบฟอร์ม

ดูรายละเอียดเพิ่มเติมได้ในเคล็ดลับการทดสอบและการแก้ไขข้อบกพร่องสำหรับ Schemeful Same-Site

ใน Firefox เวอร์ชัน 79 ขึ้นไป หากตั้งค่า network.cookie.sameSite.schemeful เป็น true ผ่าน about:config คอนโซลจะแสดงข้อความสำหรับปัญหา Schemeful Same-Site คุณอาจเห็นข้อความต่อไปนี้ในเว็บไซต์

  • "ระบบจะ ถือว่าคุกกี้ cookie_name เป็นคุกกี้ข้ามเว็บไซต์กับ http://site.example/ ในเร็วๆ นี้ เนื่องจากรูปแบบไม่ตรงกัน"
  • "ระบบได้ ถือว่าคุกกี้ cookie_name เป็นคุกกี้ข้ามเว็บไซต์กับ http://site.example/ เนื่องจากรูปแบบไม่ตรงกัน"

คำถามที่พบบ่อย

เว็บไซต์ของฉันพร้อมใช้งานใน HTTPS อย่างสมบูรณ์แล้ว เหตุใดฉันจึงเห็นปัญหาในเครื่องมือสำหรับนักพัฒนาเว็บของเบราว์เซอร์

เป็นไปได้ว่าลิงก์และทรัพยากรย่อยบางรายการยังคงชี้ไปยัง URL ที่ไม่ปลอดภัย

วิธีหนึ่งในการแก้ไขปัญหานี้คือการใช้ HTTP Strict-Transport-Security (HSTS) และคำสั่ง includeSubDomain เมื่อใช้ HSTS + includeSubDomain แม้ว่าหน้าเว็บหน้าใดหน้าหนึ่งจะมีลิงก์ที่ไม่ปลอดภัยโดยไม่ได้ตั้งใจ เบราว์เซอร์ก็จะใช้เวอร์ชันที่ปลอดภัยโดยอัตโนมัติ

ฉันควรทำอย่างไรหากอัปเกรดเป็น HTTPS ไม่ได้

แม้ว่าเราจะขอแนะนำให้คุณอัปเกรดเว็บไซต์ทั้งหมดเป็น HTTPS เพื่อปกป้องผู้ใช้ แต่หากคุณดำเนินการเองไม่ได้ เราขอแนะนำให้พูดคุยกับผู้ให้บริการโฮสติ้งเพื่อดูว่ามีตัวเลือกดังกล่าวหรือไม่ หากคุณโฮสต์เอง แล้ว Let's Encrypt มีเครื่องมือมากมายสำหรับ ติดตั้งและกำหนดค่าใบรับรอง นอกจากนี้ คุณยังพิจารณาย้ายเว็บไซต์ไปไว้หลัง CDN หรือพร็อกซีอื่นๆ ที่สามารถให้การเชื่อมต่อ HTTPS ได้ด้วย

หากยังทำไม่ได้ ให้ลองลดการป้องกัน SameSite ในคุกกี้ที่ได้รับผลกระทบ

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

การเปลี่ยนแปลงนี้จะส่งผลต่อคุกกี้ของฉันอย่างไรหากฉันไม่ได้ระบุแอตทริบิวต์ SameSite

ระบบจะถือว่าคุกกี้ที่ไม่มีแอตทริบิวต์ SameSite ระบุ SameSite=Lax และลักษณะการทำงานข้ามรูปแบบเดียวกันนี้จะมีผลกับคุกกี้เหล่านี้ด้วย โปรดทราบว่าข้อยกเว้นชั่วคราวสำหรับเมธอดที่ไม่ปลอดภัยยังคงมีผลอยู่ โปรดดูข้อมูลเพิ่มเติมที่ การลดความเสี่ยง Lax + POST ในคำถามที่พบบ่อยเกี่ยวกับ Chromium SameSite

WebSocket จะได้รับผลกระทบอย่างไร

ระบบจะยังคงถือว่าการเชื่อมต่อ WebSocket เป็นเว็บไซต์เดียวกันหากมีความปลอดภัยระดับเดียวกับหน้าเว็บ

เว็บไซต์เดียวกัน

  • การเชื่อมต่อ wss:// จาก https://
  • การเชื่อมต่อ ws:// จาก http://

ข้ามเว็บไซต์

  • การเชื่อมต่อ wss:// จาก http://
  • การเชื่อมต่อ ws:// จาก https://