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

Arthur Sonzogni
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 ที่ไม่ระบุตัวตนไม่ได้

แหล่งข้อมูล