ตอนนี้นักพัฒนาซอฟต์แวร์ที่ใช้ COEP สามารถฝัง iframe ของบุคคลที่สามที่ไม่ได้ใช้ COEP เองได้แล้ว
ฟีเจอร์นี้เปิดใช้โดยค่าเริ่มต้นใน Chrome เวอร์ชัน 110 ซึ่งจะช่วยแก้ปัญหาการร้องเรียนที่พบบ่อยที่สุดซึ่งนักพัฒนาแอปที่ทำงานกับ Cross-Origin-Embedder-Policy (COEP) พบ ได้แก่ การฝัง iframe ของบุคคลที่สามที่ไม่ได้ตั้งค่า COEP
เหตุผลที่ต้องมี COEP
Web API บางรายการเพิ่มความเสี่ยงของการโจมตีช่องทางข้าง เช่น Spectre เพื่อลดความเสี่ยงดังกล่าว เบราว์เซอร์จึงมีสภาพแวดล้อมแยกต่างหากแบบเลือกใช้เองที่เรียกว่าการแยกแบบข้ามต้นทาง ซึ่งต้องใช้การติดตั้งใช้งาน COEP การแยกแหล่งที่มาข้ามโดเมนช่วยให้เว็บไซต์ใช้ฟีเจอร์ที่มีสิทธิ์ได้ ซึ่งรวมถึง SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
และตัวจับเวลาที่มีความแม่นยำสูงที่มีความละเอียดยิ่งขึ้น
หากต้องการเปิดใช้การแยกแหล่งที่มาข้ามโดเมน เว็บไซต์ต้องส่งส่วนหัว HTTP ต่อไปนี้
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
นอกจากนี้ คุณยังใช้ COEP:credentialless แทน require-corp
ได้ด้วย ดูรายละเอียดเพิ่มเติมในเอกสารประกอบ
ปัญหาในการเปิดใช้ COEP
แม้ว่าการแยกแหล่งที่มาหลายแหล่งจะทำให้หน้าเว็บมีความปลอดภัยมากขึ้นและสามารถเปิดใช้ฟีเจอร์ที่มีประสิทธิภาพ แต่การติดตั้งใช้งาน COEP ก็อาจเป็นเรื่องยาก ปัญหาที่ใหญ่ที่สุดอย่างหนึ่งคือ iframe ข้ามแหล่งที่มาทั้งหมดต้องใช้ COEP และ CORP โดยเบราว์เซอร์จะไม่โหลด iframe ที่ไม่มีส่วนหัวเหล่านั้น
การใช้ iframe โดยไม่ต้องใช้ข้อมูลเข้าสู่ระบบช่วยแก้ปัญหาได้
เราขอแนะนํา <iframe credentialless>
เพื่อช่วยฝัง iframe ของบุคคลที่สามที่ไม่ได้ตั้งค่า COEP การเพิ่มแอตทริบิวต์ credentialless
ลงในองค์ประกอบ <iframe>
จะโหลด iframe จากบริบทอื่นที่ว่างเปล่า โดยเฉพาะอย่างยิ่ง โฆษณาจะโหลดโดยไม่มีคุกกี้ ซึ่งจะช่วยให้นำข้อจำกัด COEP ออกได้
ตัวอย่าง
<iframe credentialless src="https://example.com">
iframe นี้สร้างขึ้นในบริบทชั่วคราวใหม่และไม่มีสิทธิ์เข้าถึงคุกกี้ที่เชื่อมโยงกับเว็บไซต์ระดับบนสุด แต่จะเริ่มด้วยโฟลเดอร์คุกกี้ที่ว่างเปล่า ในทํานองเดียวกัน API พื้นที่เก็บข้อมูล เช่น LocalStorage, CacheStorage, IndexedDB และอื่นๆ จะโหลดและจัดเก็บข้อมูลในพาร์ติชันชั่วคราวใหม่ พาร์ติชันจะมีขอบเขตทั้งเอกสารระดับบนสุดปัจจุบันและต้นทางของ iframe ระบบจะล้างพื้นที่เก็บข้อมูลทั้งหมดนี้เมื่อระบบยกเลิกการโหลดเอกสารระดับบนสุด
Iframe ที่ไม่มีข้อมูลเข้าสู่ระบบไม่อยู่ภายใต้กฎการฝังของ COEP ข้อมูลดังกล่าวยังคงปลอดภัย เนื่องจากระบบจะโหลดจากบริบทใหม่ที่เป็นค่าว่างทุกครั้ง จึงไม่ควรมีข้อมูลที่ปรับเปลี่ยนในแบบของคุณ ซึ่งเป็นสิ่งที่ผู้โจมตีต้องการ หาก iframe มีเฉพาะข้อมูลสาธารณะ ก็จะไม่มีคุณค่าสำหรับผู้โจมตี
สาธิต
คุณสามารถดูการสาธิตของ iframe ที่ไม่มีข้อมูลเข้าสู่ระบบ
คำถามที่พบบ่อย
เบราว์เซอร์อื่นๆ จะนำมาใช้งานฟีเจอร์นี้ไหม
- คำขอตำแหน่งจาก Mozilla: รอดำเนินการ
- คำขอตำแหน่งของ Webkit: ไม่มีสัญญาณ
- แท็ก W3C คำขอตำแหน่ง: satisfied
<iframe>
ที่ฝังอยู่ภายใน <iframe credentialless>
เป็นแบบไม่มีข้อมูลเข้าสู่ระบบหรือไม่
ได้ สืบทอด เมื่อ iframe ไม่มีข้อมูลเข้าสู่ระบบแล้ว การตั้งค่าดังกล่าวจะมีผลกับ iframe ทั้งหมดในซับต้นไม้ทั้งหมดแม้ว่าจะไม่มีแอตทริบิวต์ credentialless
ก็ตาม
ป๊อปอัปที่สร้างจาก <iframe credentialless>
จะไม่มีข้อมูลเข้าสู่ระบบด้วยใช่ไหม
ป๊อปอัปจะเปิดขึ้นเหมือนกับมีการตั้งค่า noopener
โดยระบบจะสร้างในบริบทระดับบนสุดปกติใหม่และไม่ใช่แบบไม่มีข้อมูลเข้าสู่ระบบ แต่จะสื่อสารกับ iframe ที่ไม่มีข้อมูลเข้าสู่ระบบไม่ได้
วิธีตรวจหาว่ามีการฝังเอกสารใน iframe ที่ไม่มีข้อมูลเข้าสู่ระบบ
window.credentialless
เป็นจริงภายใน iframe ที่ไม่มีข้อมูลเข้าสู่ระบบ และจะเป็นเท็จหากไม่ใช่ ค่าของ undefined
ในเว็บเบราว์เซอร์ที่ไม่รองรับ <iframe credentialless>
แหล่งข้อมูล
- การทําให้เว็บไซต์ "แยกแหล่งที่มาหลายแหล่ง" โดยใช้ COOP และ COEP
- เหตุใดจึงต้องใช้ "แยกต่างหากแบบข้ามต้นทาง" เพื่อใช้ฟีเจอร์ที่มีประสิทธิภาพ
- คําแนะนําในการเปิดใช้การแยกแบบข้ามต้นทาง
- การอัปเดต SharedArrayBuffer ใน Chrome 88 บน Android และ Chrome 92 บนเดสก์ท็อป
- โหลดทรัพยากรข้ามโดเมนโดยไม่ใช้ส่วนหัว CORP โดยใช้
COEP: credentialless
- IFrame ที่ไม่มีข้อมูลเข้าสู่ระบบ - ความปลอดภัยของเว็บ | MDN