โหลดทรัพยากรแบบข้ามต้นทางที่ไม่มีส่วนหัว CORP โดยใช้ COEP: ข้อมูลรับรอง

ทรัพยากรแบบข้ามต้นทางที่ให้บริการโดยบุคคลที่สามมักไม่มีส่วนหัว CORP ที่เพียงพอ หากขอข้อมูลเข้าสู่ระบบได้โดยไม่มีข้อมูลเข้าสู่ระบบ คุณจะเปิดใช้การแยกแบบข้ามต้นทางได้โดยทําเครื่องหมาย

เราได้จัดส่งค่านโยบายเครื่องมือฝังแบบข้ามต้นทาง (COEP) ใหม่ credentialless ซึ่งทำให้เบราว์เซอร์โหลดทรัพยากรแบบข้ามต้นทางได้ ไม่ใช้นโยบาย Cross-Origin Resource Policy (CORP) โดยการส่งคำขอโดยไม่มี ข้อมูลเข้าสู่ระบบ เช่น คุกกี้ วิธีนี้จะช่วยให้นักพัฒนาซอฟต์แวร์ปรับใช้แบบข้ามต้นทาง โดดเดี่ยวได้ง่ายขึ้น

เหตุผลที่เราต้องมีการแยกแบบข้ามต้นทาง

API ของเว็บบางรูปแบบเพิ่มความเสี่ยงที่จะเกิดการโจมตีแบบ Side-channel เช่น Spectre ถึง ลดความเสี่ยงดังกล่าว เนื่องจากเบราว์เซอร์มีระบบการทำงานแบบแยกที่อิงตามการเลือกรับที่เรียกว่า Cross-Originorigin มีข้ามต้นทาง Isolation ทำให้หน้าเว็บสามารถใช้คุณลักษณะที่เป็นสิทธิ์เฉพาะ ซึ่งรวมถึง SharedArrayBuffer performance.measureUserAgentSpecificMemory() และตัวจับเวลาที่มีความแม่นยำสูงพร้อมความละเอียดที่ดีขึ้น ขณะแยกต้นทางออกจากแหล่งที่มาอื่นๆ เว้นแต่จะได้เลือกใช้ไว้

หน้าเว็บต้องส่งส่วนหัว HTTP 2 รายการเพื่อเปิดใช้การแยกแบบข้ามต้นทาง

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

เมื่อมีการระบุสถานะแยกแบบข้ามต้นทาง จะต้องให้บริการทรัพยากรแบบข้ามต้นทางทั้งหมด ด้วย CORS หรือตั้งค่าส่วนหัว Cross-Origin-Resource-Policy ให้โหลด

ปัญหาในการเปิดใช้การแยกแบบข้ามต้นทาง

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

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

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

credentialless เพื่อช่วยเหลือ

และนี่คือสิ่งที่ COEP: credentialless เข้ามาช่วย credentialless เป็นค่าใหม่ สำหรับส่วนหัว Cross-Origin-Embedder-Policy เช่นเดียวกับ require-corp เปิดใช้การแยกแบบข้ามต้นทาง แต่แทนที่จะต้องใช้ CORP:cross-origin ส่วนหัวสำหรับคำขอข้ามต้นทางที่ไม่มี cors จะส่งแทนโดยไม่มี ข้อมูลเข้าสู่ระบบ (เช่น คุกกี้)

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

Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin

ซึ่งหมายความว่าเซิร์ฟเวอร์แบบข้ามต้นทางที่ร้องขอจะไม่สามารถตอบกลับด้วย แหล่งข้อมูลที่ละเอียดอ่อน และ ผู้ส่งคำขอสามารถสันนิษฐานได้ว่าการตอบกลับ มีข้อมูลที่เผยแพร่ต่อสาธารณะ

นอกจากนี้ยังสอดคล้องกับเบราว์เซอร์ แผนการเลิกใช้คุกกี้ของบุคคลที่สาม

สาธิต

คุณสามารถลองใช้ตัวเลือกส่วนหัวต่างๆ ในการสาธิตนี้ https://cross-origin-isolation.glitch.me

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

ฉันส่งคำขอข้อมูลเข้าสู่ระบบภายใต้สภาพแวดล้อมของ credentialless ได้ไหม

ต้นทุนของการเปลี่ยนโหมดของคำขอเพื่อให้มีการตรวจสอบ CORS ในคำตอบ สำหรับแท็ก HTML เช่น <audio>, <img>, <link>, <script>, และ <video> เพียงต่อท้าย crossorigin="use-credentials" อย่างชัดแจ้งเพื่อแจ้ง เพื่อส่งคำขอข้อมูลเข้าสู่ระบบ

ตัวอย่างเช่น แม้ว่าเอกสารใน https://www.example.com จะมี ส่วนหัว Cross-Origin-Embedder-Policy: credentialless <img src="https://images.example.com/avatar.png" crossorigin="use-credentials"> จะ ส่งคำขอที่มีข้อมูลรับรอง

สำหรับ fetch() API คุณจะใช้ request.mode = 'cors' ได้

ระบุ COEP: credentialless แล้ว COEP: require-corp จะยังมีประโยชน์สำหรับเว็บไซต์ของฉันอย่างไร

COEP: require-corp ไม่ได้กำหนดให้คุณต้องเปลี่ยนโหมดคำขอด้วยตนเองเป็น CORS หากต้องใช้คุกกี้สำหรับทรัพยากรย่อยแบบข้ามต้นทาง

ฉันจะโหลด iframe แบบข้ามต้นทางโดยไม่มีส่วนหัวพิเศษภายใต้สภาพแวดล้อม credentialless ได้ไหม

ไม่ได้ การโหลด iframe แบบข้ามต้นทางภายใต้สภาพแวดล้อม credentialless ยังคงต้องใช้เงื่อนไขเดียวกันกับ require-corp เอกสาร iframe ต้องแสดงด้วยส่วนหัว 2 แบบ ดังนี้

  • Cross-Origin-Embedder-Policy: credentialless (หรือ require-corp)
  • Cross-Origin-Resource-Policy: cross-origin

ข่าวดีคือมีการพูดคุยอย่างต่อเนื่องเกี่ยวกับการอนุญาตให้โหลด iframe แบบข้ามต้นทางโดยไม่ต้องมีส่วนหัวเหล่านั้นด้วยการให้ iframe crossorigin="anonymous" การดำเนินการนี้จะอนุญาตให้โหลด iframe แบบข้ามต้นทางโดยไม่มีส่วนหัวแต่ไม่มีส่วนหัว ข้อมูลเข้าสู่ระบบ

จะมีการใช้งานฟีเจอร์นี้ในเบราว์เซอร์อื่นๆ ด้วยไหม

สิ่งที่จะเกิดขึ้นเร็วๆ นี้

เรามีการอัปเดตเพิ่มเติมอีก 2 รายการที่จะลดความท้าทายอื่นๆ ที่เกี่ยวข้องกับ การแยกแบบข้ามต้นทาง:

ผู้ที่ลงทะเบียนการทดลองใช้ Chrome จากต้นทางเพื่อขยายการเปลี่ยนแปลง SharedArrayBuffer เนื่องจาก คุณอาจสงสัยว่าอุปสรรคข้างต้นจะสิ้นสุดลงเมื่อใด เดิมทีเรา ประกาศว่าจะสิ้นสุดใน Chrome 96 แต่เราได้ตัดสินใจที่จะ เลื่อนการตั้งค่านี้ไปยัง Chrome 106

แหล่งข้อมูล

รูปภาพโดย Martin Adams ในวันที่ หน้าจอแนะนํา