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