การทดลองใช้ iframe จากต้นทางที่ไม่ระบุตัวตน: ฝัง iframe ในสภาพแวดล้อม COEP ได้อย่างง่ายดาย

อาร์เธอร์ ซอนซอกนี
Arthur Sonzogni

ตอนนี้นักพัฒนาซอฟต์แวร์ที่ใช้ 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 แบบไม่ระบุตัวตน

  1. ขอโทเค็น สำหรับต้นทาง
  2. ใช้โทเค็นด้วยวิธีใดวิธีหนึ่งต่อไปนี้
    • ใน 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
  3. เพิ่ม iframe แบบไม่ระบุตัวตนลงในหน้าเว็บ html <iframe anonymous src="https://example.com">

หากมีความคิดเห็นเกี่ยวกับฟีเจอร์นี้ โปรดแจ้งปัญหาในที่เก็บของ GitHub

ช่วงทดลองใช้จากต้นทางของบุคคลที่สาม

ช่วงทดลองใช้จากต้นทางพร้อมใช้งานสำหรับสคริปต์ของบุคคลที่สามด้วย ซึ่งหมายความว่าจะเปิดใช้ด้วยสคริปต์ ที่ฝังอยู่ในหน้าได้

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีลงทะเบียนทดลองใช้จากต้นทางของบุคคลที่สาม

คำถามที่พบบ่อย

เบราว์เซอร์อื่นๆ จะใช้งานฟีเจอร์นี้หรือไม่

iframe ฝังอยู่ใน <iframe anonymous> แบบไม่ระบุตัวตนใช่ไหม

ใช่ ซึ่งสืบทอดมา เมื่อ iframe เป็นแบบไม่ระบุชื่อ ก็จะมีผลกับ iframe ทั้งหมดในแผนผังย่อยแม้ว่าจะไม่มีแอตทริบิวต์ anonymous ก็ตาม

ป๊อปอัปสร้างขึ้นจาก <iframe anonymous> เป็นแบบไม่ระบุตัวตนด้วยหรือไม่

ป๊อปอัปจะเปิดขึ้นเหมือนกับว่าได้ตั้งค่า noopener ไว้ ซึ่งจะสร้างขึ้นจากบริบทระดับบนสุดตามปกติใหม่ และไม่ใช่แบบไม่ระบุตัวตน และไม่สามารถสื่อสารกับ iframe ที่ลบข้อมูลระบุตัวบุคคลได้

แหล่งข้อมูล