ตอนนี้นักพัฒนาซอฟต์แวร์ที่ใช้ COEP สามารถฝัง iframe ของบุคคลที่สามที่ไม่ได้ใช้ COEP เองได้แล้ว
เหตุผลที่ต้องมี COEP
Web API บางรายการเพิ่มความเสี่ยงของการโจมตีช่องทางข้าง เช่น Spectre เพื่อลดความเสี่ยงดังกล่าวเบราว์เซอร์จึงมีสภาพแวดล้อมแยกต่างหากแบบเลือกใช้ที่เรียกว่าการแยกแบบข้ามต้นทาง ซึ่งต้องใช้ COEP ร่วมกับสิ่งอื่นๆ ซึ่งช่วยให้เว็บไซต์ใช้ฟีเจอร์ที่มีสิทธิ์ได้ ซึ่งรวมถึง SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
และตัวจับเวลาที่แม่นยำสูงที่มีความละเอียดมากขึ้น
หากต้องการเปิดใช้การแยกข้ามแหล่งที่มา เว็บไซต์ต้องส่งส่วนหัว HTTP 2 รายการต่อไปนี้
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
ปัญหาในการเปิดใช้ COEP
แม้ว่าการแยกแหล่งที่มาหลายแหล่งจะทำให้หน้าเว็บมีความปลอดภัยมากขึ้นและสามารถเปิดใช้ฟีเจอร์ที่มีประสิทธิภาพได้ แต่การติดตั้งใช้งาน COEP ก็อาจเป็นเรื่องยาก ปัญหาที่ใหญ่ที่สุดอย่างหนึ่งคือ iframe ข้ามแหล่งที่มาทั้งหมดต้องใช้ COEP และ CORP ด้วยเช่นกัน เบราว์เซอร์จะไม่โหลด iframe ที่ไม่มีส่วนหัวเหล่านั้น
โดยปกติแล้ว iframe จะแสดงโดยบุคคลที่สาม ซึ่งอาจทำให้การติดตั้งใช้งาน COEP เป็นเรื่องยาก
การใช้ iframe ที่ไม่ระบุชื่อช่วยแก้ปัญหาได้
ด้วยเหตุนี้จึงมีการใช้ iframe ที่ไม่ระบุตัวตน การเพิ่มแอตทริบิวต์ anonymous
ลงในองค์ประกอบ <iframe>
จะเป็นการโหลด iframe จากพาร์ติชันพื้นที่เก็บข้อมูลชั่วคราวอื่นและจะไม่อยู่ภายใต้ข้อจำกัดของ COEP อีกต่อไป
ตัวอย่าง
<iframe anonymous src="https://example.com">
ระบบจะสร้าง iframe ในบริบทใหม่ชั่วคราวและไม่มีสิทธิ์เข้าถึงคุกกี้ที่เชื่อมโยงกับเว็บไซต์ระดับบนสุด โดยเริ่มต้นจากโฟลเดอร์คุกกี้ที่ว่างเปล่า ในทํานองเดียวกัน API พื้นที่เก็บข้อมูล เช่น LocalStorage
, CacheStorage
, IndexedDB
และอื่นๆ จะโหลดและจัดเก็บข้อมูลในพาร์ติชันชั่วคราวใหม่ พาร์ติชันจะกำหนดขอบเขตให้กับเอกสารระดับบนสุดและต้นทางของ iframe ปัจจุบัน ระบบจะล้างพื้นที่เก็บข้อมูลเมื่อระบบยกเลิกการโหลดเอกสารระดับบนสุด
Iframe ที่ไม่ระบุชื่อไม่อยู่ภายใต้กฎการฝังของ COEP ซึ่งยังคงปลอดภัยเนื่องจากระบบจะโหลดจากบริบทใหม่ที่เป็นค่าว่างทุกครั้ง ระบบจะโหลดวิดีโอเหล่านั้นโดยไม่มีการปรับเปลี่ยนข้อมูลให้เหมาะกับผู้ใช้ โดยจะมีเฉพาะข้อมูลสาธารณะเท่านั้น ซึ่งไม่มีคุณค่าต่อผู้โจมตี
สาธิต
คุณสามารถดู iframe ที่ไม่ระบุตัวตนได้ที่ https://anonymous-iframe.glitch.me/
ลงทะเบียนทดลองใช้จากต้นทาง
เพื่อให้มั่นใจว่า iframe แบบไม่ระบุตัวตนจะช่วยนักพัฒนาแอปนำการแยกกันระหว่างต้นทางต่างๆ ไปใช้ได้ เราจึงให้บริการ iframe แบบไม่ระบุตัวตนใน Chrome ตั้งแต่เวอร์ชัน 106 ถึง 108 เป็นเวอร์ชันทดลองใช้
ลงทะเบียนเพื่อทดลองใช้จากต้นทางเพื่อให้เว็บไซต์ของคุณใช้ iframe แบบไม่ระบุตัวตนได้
- ขอโทเค็นสำหรับต้นทาง
- ใช้โทเค็นด้วยวิธีใดวิธีหนึ่งต่อไปนี้
- ใน HTML ให้ทำดังนี้
html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
- ใน JavaScript ให้ทำดังนี้
js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
- ในส่วนหัว HTTP
text Origin-Trial: TOKEN_GOES_HERE
- ใน HTML ให้ทำดังนี้
- เพิ่ม iframe ที่ไม่ระบุตัวตนลงในหน้าเว็บ
html <iframe anonymous src="https://example.com">
หากมีความคิดเห็นเกี่ยวกับฟีเจอร์นี้ โปรดแจ้งปัญหาในที่เก็บของ GitHub
ช่วงทดลองใช้จากต้นทางของบุคคลที่สาม
ช่วงทดลองใช้จากต้นทางยังมีให้บริการสำหรับสคริปต์ของบุคคลที่สามด้วย ซึ่งหมายความว่าสามารถเปิดใช้ได้โดยใช้สคริปต์ที่ฝังอยู่ในหน้า
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีลงทะเบียนช่วงทดลองใช้จากต้นทางของบุคคลที่สาม
คำถามที่พบบ่อย
เบราว์เซอร์อื่นๆ จะนำมาใช้ฟีเจอร์นี้ไหม
- คำขอตำแหน่งของ Mozilla: รอดำเนินการ
- คำขอตำแหน่งของ Webkit: ไม่มีสัญญาณ
- คำขอตำแหน่ง W3C TAG: satisfied
iframe ที่ฝังอยู่ภายใน <iframe anonymous>
เป็นแบบไม่ระบุตัวตนหรือไม่
ได้ สืบทอดได้ เมื่อ iframe เป็นแบบไม่ระบุตัวบุคคลแล้ว การตั้งค่าดังกล่าวจะมีผลกับ iframe ทั้งหมดในทั้งซับต้นไม้ แม้ว่าจะไม่มีแอตทริบิวต์ anonymous
ก็ตาม
ป๊อปอัปที่สร้างขึ้นจาก <iframe anonymous>
จะไม่ระบุตัวตนด้วยใช่ไหม
ป๊อปอัปจะเปิดขึ้นเหมือนกับมีการตั้งค่า noopener
โดยสร้างขึ้นจากบริบทระดับบนสุดใหม่แบบปกติและไม่ใช่แบบไม่ระบุตัวบุคคล แต่จะสื่อสารกับ iframe ที่ไม่ระบุตัวตนไม่ได้
แหล่งข้อมูล
- การทําให้เว็บไซต์ "แยกต้นทางหลายแหล่ง" โดยใช้ COOP และ COEP
- เหตุผลที่คุณต้อง "แยกต่างหากแบบข้ามต้นทาง" เพื่อใช้ฟีเจอร์ที่มีประสิทธิภาพ
- คําแนะนําในการเปิดใช้การแยกแบบข้ามต้นทาง
- การอัปเดต SharedArrayBuffer ใน Chrome 88 บน Android และ Chrome 92 บนเดสก์ท็อป
- โหลดทรัพยากรข้ามโดเมนโดยไม่ใช้ส่วนหัว CORP โดยใช้
COEP: credentialless