ก่อนเวอร์ชัน 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