การปรับตัวจับเวลาให้สอดคล้องกันด้วยข้อจำกัดการแยกแบบข้ามต้นทาง

ก่อนเวอร์ชัน 91 ความละเอียดของตัวจับเวลาใน Chrome ถูกจำกัดไว้ที่ 5 ไมโครวินาทีบนเดสก์ท็อป ที่เปิดใช้การแยกเว็บไซต์ และไม่เกิน 100 ไมโครวินาทีใน Android ซึ่งไม่ได้เปิดใช้

ตั้งแต่เวอร์ชัน 91 เป็นต้นไป หลังจากการเปลี่ยนแปลงข้อกำหนด Chrome จะจำกัดความละเอียดของตัวจับเวลาที่ชัดเจน (performance.now(), performance.timeOrigin และ API ประสิทธิภาพอื่นๆ ที่แสดง DOMHighResTimestamps) ถึง 100 ไมโครวินาทีในแพลตฟอร์มต่างๆ การเปิดใช้การแยกแบบข้ามต้นทางจะช่วยให้เว็บไซต์ผ่อนปรนข้อจำกัดลงเป็น 5 ไมโครวินาทีได้ไม่ว่าจะใช้แพลตฟอร์มใดก็ตาม

การเพิ่มความสามารถที่มีประสิทธิภาพมากขึ้นโดยการเปิดใช้การแยกแบบข้ามต้นทางเป็นวิธีการที่คล้ายกันใน SharedArrayBuffer การแยกแบบข้ามต้นทางเป็นสถานะที่หน้าเว็บแยกออกจากต้นทางอื่นๆ ยกเว้นต้นทางที่เลือกใช้

ฉันต้องดำเนินการอะไรไหม

อาจจะไม่ performance.now() ถูกจำกัดความละเอียดที่หยาบกว่ามากในเบราว์เซอร์อื่นๆ (เช่น 1 มิลลิวินาที = 0.001 วินาที) คุณจึงไม่ควรยึดถือความละเอียดปัจจุบันอยู่ดี

ในขณะเดียวกัน หากต้องการใช้ตัวจับเวลาที่มีความละเอียดสูงขึ้น เช่น เพื่อวัดประสิทธิภาพที่แม่นยํามากขึ้น คุณต้องตรวจสอบว่าเว็บไซต์แยกแบบข้ามต้นทาง ซึ่งจะมอบความละเอียดที่ดีขึ้นทั้งใน Chrome และเบราว์เซอร์อื่นๆ ที่มีพื้นฐานมาจาก Chromium รวมถึง Firefox

ตัวจับเวลาต้องทำอย่างไรกับการแยกแบบข้ามต้นทาง

ผู้ให้บริการเบราว์เซอร์ตัดสินใจจำกัดตัวจับเวลาให้ใช้ความละเอียดที่หยาบยิ่งขึ้น (รวมถึงความพร้อมใช้งานของ SharedArrayBuffers ซึ่งสามารถใช้เป็นตัวจับเวลาโดยนัยได้) เมื่อพบ Spectre นั่นเป็นเพราะ Spectre และการโจมตีแบบดำเนินการเชิงคาดเดาที่คล้ายคลึงกันอาศัยตัวจับเวลาในการวัดเวลาที่ใช้สำหรับการดำเนินการบางอย่าง จากนั้นจึงเดาเนื้อหาในหน่วยความจำของกระบวนการ

แม้ว่าการโจมตีแบบดำเนินการเชิงคาดการณ์จะใช้ตัวจับเวลาแบบหยาบๆ ได้ แต่ตัวจับเวลาความละเอียดสูงจะช่วยเพิ่มความเร็วได้ Chrome ใช้สถาปัตยกรรมการแยกเว็บไซต์และกลไกอื่นๆ เพื่อลดความเสี่ยงและเปิดใช้ฟังก์ชันเหล่านั้นอีกครั้ง แต่จะใช้ได้เฉพาะแพลตฟอร์มเดสก์ท็อปและเบราว์เซอร์ Chromium เท่านั้น การมี API ที่ต้องอาศัยสถาปัตยกรรมเบราว์เซอร์ที่เกี่ยวข้องนั้นไม่ใช่วิธีที่ดีนัก

การแยกแบบข้ามต้นทางถือเป็นเกณฑ์พื้นฐานมาตรฐานเพื่อให้เบราว์เซอร์เรียกใช้หน้าเว็บในสภาพแวดล้อมที่แยกออกมา เพื่อให้โหลดทรัพยากรแบบข้ามต้นทางไม่ได้ จึงไม่มีความเสี่ยงสำหรับ Spectre การแยกแบบข้ามต้นทางทำให้เราสามารถอนุญาตให้หน้าเว็บเข้าถึงตัวจับเวลาความละเอียดสูง, SharedArrayBuffer และ API อื่นๆ ที่ไม่ปลอดภัยเพื่อเปิดเผยในกระบวนการที่อ่านข้อมูลข้ามต้นทางได้

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับเบื้องหลังการเปลี่ยนแปลงนี้ โปรดอ่านเหตุผลที่ต้องมี "การแยกแบบข้ามต้นทาง" สำหรับฟีเจอร์ที่มีประสิทธิภาพ

รูปภาพปกโดย Linda Perez Johannessen ใน Unsplash