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