ตอนนี้นักพัฒนาซอฟต์แวร์ที่ใช้ COEP สามารถฝัง iframe ของบุคคลที่สามที่ไม่ได้ใช้ COEP เองได้แล้ว
ระบบเปิดใช้ Iframe credentialless จาก Chrome เวอร์ชัน 110 โดยค่าเริ่มต้น วิธีนี้ช่วยแก้ปัญหาข้อร้องเรียนที่นักพัฒนาซอฟต์แวร์ใช้นโยบายเครื่องมือฝังแบบข้ามต้นทาง (COEP) มากที่สุดซึ่งมีการฝัง iframe ของบุคคลที่สามที่ไม่ได้ตั้งค่า COEP
เหตุใดเราจึงต้องมี COEP
โดย API ของเว็บบางส่วนจะเพิ่มความเสี่ยงต่อการโจมตีแบบ Side-channel เช่น 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: พอใจ
<iframe>
ฝังอยู่ในข้อมูลเข้าสู่ระบบ <iframe credentialless>
ใช่ไหม
ใช่ ซึ่งสืบทอดมา เมื่อ iframe เป็นแบบไร้ข้อมูลเข้าสู่ระบบ ก็จะมีผลกับ iframe ทั้งหมดในแผนผังย่อยแม้ว่าจะไม่มีแอตทริบิวต์ credentialless
ก็ตาม
ป๊อปอัปสร้างขึ้นจาก <iframe credentialless>
โดยไม่มีข้อมูลเข้าสู่ระบบด้วยใช่ไหม
ป๊อปอัปจะเปิดขึ้นเหมือนกับว่าได้ตั้งค่า noopener
ไว้ ลิงก์เหล่านี้สร้างขึ้นในบริบทระดับบนสุดแบบปกติใหม่ และไม่ใช่การรับรอง และไม่สามารถสื่อสารกับ iframe ที่ไม่มีข้อมูลเข้าสู่ระบบ
วิธีตรวจสอบว่าเอกสารฝังอยู่ใน iframe ที่ไม่มีข้อมูลเข้าสู่ระบบ
window.credentialless
จะเป็น "จริง" ภายใน iframe ที่ไม่มีเอกสารรับรอง และจะ "เท็จ" หากไม่เป็นเช่นนั้น ค่าคือ undefined
ในเว็บเบราว์เซอร์ที่ไม่รองรับ <iframe credentialless>
แหล่งข้อมูล
- การทำให้เว็บไซต์ "แยกแบบข้ามต้นทาง" โดยใช้ COOP และ COEP
- ทำไมคุณจึงต้องมี "การแยกแบบข้ามต้นทาง" สำหรับฟีเจอร์ที่มีประสิทธิภาพ
- คำแนะนำในการเปิดใช้การแยกแบบข้ามต้นทาง
- การอัปเดต SharedArrayBuffer ใน Android Chrome 88 และ Chrome 92 ในเดสก์ท็อป
- โหลดทรัพยากรแบบข้ามต้นทางที่ไม่มีส่วนหัว CORP โดยใช้
COEP: credentialless
- ข้อมูลเข้าสู่ระบบ IFrame - ความปลอดภัยของเว็บ | MDN