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

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

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

เหตุใดเราจึงต้องมีการแยกแบบข้ามต้นทาง

โดย API ของเว็บบางส่วนจะเพิ่มความเสี่ยงต่อการโจมตีแบบ Side-channel เช่น Spectre เบราว์เซอร์จะเสนอสภาพแวดล้อมแยกต่างหากจากการเลือกใช้ที่เรียกว่าการแยกแบบข้ามต้นทางเพื่อลดความเสี่ยงดังกล่าว สถานะการแยกแบบข้ามต้นทางทำให้หน้าเว็บใช้ฟีเจอร์พิเศษต่างๆ ได้ ซึ่งรวมถึง 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 สำหรับคำขอแบบข้ามต้นทาง

คุณจะเปิดใช้การแยกแบบข้ามต้นทางได้แทนการใช้ส่วนหัว 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"> จะส่งคำขอที่มีข้อมูลรับรอง

สำหรับ API fetch() คุณจะใช้ 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 ใน Unsplash