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