ทรัพยากรแบบข้ามต้นทางที่บุคคลที่สามให้บริการมักไม่มีส่วนหัว 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 แบบข้ามต้นทางได้โดยไม่มีส่วนหัวแต่ไม่มีข้อมูลเข้าสู่ระบบ
เบราว์เซอร์อื่นๆ จะใช้งานฟีเจอร์นี้หรือไม่
- ปัญหาการติดตาม Firefox
- คำขอ Webkit สำหรับตำแหน่ง: ไม่มีสัญญาณ
- คำขอตำแหน่ง W3C TAG: รอดำเนินการ
สิ่งที่จะเกิดขึ้นต่อไป
มีการอัปเดตเพิ่มเติม 2 รายการที่จะช่วยลดอุปสรรคอื่นๆ ที่เกี่ยวข้องกับการแยกแบบข้ามต้นทาง ได้แก่
ผู้ที่ลงทะเบียนเข้าร่วมการทดลองใช้จากต้นทางของ Chrome เพื่อขยายการเปลี่ยนแปลง SharedArrayBuffer เนื่องจากข้อผิดพลาดข้างต้นอาจสงสัยว่าการใช้งานจะสิ้นสุดลงเมื่อใด เดิมทีเราประกาศว่าจะสิ้นสุดการใช้งานใน Chrome 96 แต่เราได้ตัดสินใจที่จะเลื่อนเวอร์ชันนี้ไปยัง Chrome 106
แหล่งข้อมูล
- การทำให้เว็บไซต์ "แยกแบบข้ามต้นทาง" โดยใช้ COOP และ COEP
- ทำไมคุณจึงต้องมี "การแยกแบบข้ามต้นทาง" สำหรับฟีเจอร์ที่มีประสิทธิภาพ
- คำแนะนำในการเปิดใช้การแยกแบบข้ามต้นทาง
- การอัปเดต SharedArrayBuffer ใน Android Chrome 88 และ Chrome 92 ในเดสก์ท็อป
รูปภาพโดย Martin Adams ใน Unsplash