การปรับปรุงที่สำคัญอย่างหนึ่งของ Google Safe Browsing v5 เมื่อเทียบกับ v4 (โดยเฉพาะอย่างยิ่ง v4 Update API) คือความใหม่และความครอบคลุมของข้อมูล เนื่องจากการป้องกันขึ้นอยู่กับฐานข้อมูลในเครื่องที่ไคลเอ็นต์ดูแลเป็นอย่างมาก ความล่าช้าและขนาดของการอัปเดตฐานข้อมูลในเครื่องจึงเป็นสาเหตุหลักที่ทำให้พลาดการป้องกัน ใน v4 ไคลเอ็นต์ทั่วไปจะใช้เวลา 20-50 นาทีในการรับรายการภัยคุกคามเวอร์ชันล่าสุด น่าเสียดายที่การโจมตีแบบฟิชชิงแพร่กระจายอย่างรวดเร็ว โดยในปี 2021 เว็บไซต์ 60% ที่ทำการโจมตีมีอายุไม่ถึง 10 นาที การวิเคราะห์ของเราแสดงให้เห็นว่าการป้องกันฟิชชิงที่ขาดหายไปประมาณ 25-30% เกิดจากข้อมูลที่ล้าสมัยดังกล่าว นอกจากนี้ อุปกรณ์บางเครื่องยังไม่มีความพร้อมในการจัดการรายการภัยคุกคามทั้งหมดของ Google Safe Browsing ซึ่งมีขนาดใหญ่ขึ้นเรื่อยๆ เมื่อเวลาผ่านไป
หากปัจจุบันคุณใช้ v4 Update API คุณจะย้ายข้อมูลจาก v4 ไปยัง v5 ได้อย่างราบรื่นโดยไม่ต้องรีเซ็ตหรือลบฐานข้อมูลในเครื่อง ส่วนนี้จะอธิบายวิธีดำเนินการดังกล่าว
การแปลงการอัปเดตรายการ
ใน v5 ระบบจะระบุรายการตามชื่อเท่านั้น ซึ่งต่างจาก v4 ที่ระบุรายการตามทูเพิลของประเภทภัยคุกคาม ประเภทแพลตฟอร์ม ประเภทรายการภัยคุกคาม ซึ่งจะช่วยให้มีความยืดหยุ่นเมื่อรายการ v5 หลายรายการอาจแชร์ภัยคุกคามประเภทเดียวกัน ระบบจะนำประเภทแพลตฟอร์มและประเภทรายการภัยคุกคามออกใน v5
ใน v4 ผู้ใช้จะใช้เมธอด threatListUpdates.fetch เพื่อดาวน์โหลดรายการ ใน v5 คุณจะต้องเปลี่ยนไปใช้เมธอด hashLists.batchGet
ควรทำการเปลี่ยนแปลงต่อไปนี้ในคำขอ
- นำออบเจ็กต์ v4 ClientInfoออกทั้งหมด แทนที่จะระบุการระบุตัวตนของไคลเอ็นต์โดยใช้ช่องเฉพาะ ให้ใช้ส่วนหัว User-Agent ที่รู้จักกันดีแทน แม้ว่าจะไม่มีรูปแบบที่กำหนดไว้สำหรับการระบุไคลเอ็นต์ในส่วนหัวนี้ แต่เราขอแนะนำให้ระบุรหัสไคลเอ็นต์และเวอร์ชันไคลเอ็นต์เดิมโดยคั่นด้วยอักขระช่องว่างหรือเครื่องหมายทับ
- สำหรับออบเจ็กต์ ListUpdateRequestv4 แต่ละรายการ * ค้นหาชื่อรายการ v5 ที่เกี่ยวข้องจากรายการที่ใช้ได้ แล้วระบุชื่อนั้นในคำขอ v5- นำฟิลด์ที่ไม่จำเป็นออก เช่น threat_entry_typeหรือplatform_type
- ฟิลด์ stateใน v4 ใช้กับฟิลด์versionsใน v5 ได้โดยตรง คุณสามารถส่งสตริงไบต์เดียวกันกับที่จะส่งไปยังเซิร์ฟเวอร์โดยใช้ฟิลด์stateใน v4 ใน v5 ได้โดยใช้ฟิลด์versions
- สำหรับข้อจำกัด v4 นั้น v5 จะใช้เวอร์ชันที่เรียบง่ายกว่าที่เรียกว่า SizeConstraintsไม่ควรใส่ช่องเพิ่มเติม เช่นregion
 
- นำฟิลด์ที่ไม่จำเป็นออก เช่น 
ควรทำการเปลี่ยนแปลงต่อไปนี้กับการตอบกลับ
- enum ResponseTypeของ v4 จะแทนที่ด้วยช่องบูลีนชื่อpartial_update
- ตอนนี้คุณตั้งค่าฟิลด์ minimum_wait_durationเป็น 0 หรือละเว้นได้แล้ว หากเป็นเช่นนั้น ระบบจะขอให้ไคลเอ็นต์ส่งคำขออื่นทันที กรณีนี้จะเกิดขึ้นก็ต่อเมื่อไคลเอ็นต์ระบุข้อจํากัดที่เล็กลงเกี่ยวกับขนาดการอัปเดตสูงสุดในSizeConstraintsมากกว่าขนาดฐานข้อมูลสูงสุด
- ตรรกะสำหรับการถอดรหัสแฮชที่เข้ารหัส Rice-Golomb ต้องมีการปรับหลักๆ 2 อย่าง ดังนี้
            - Endianness and Sorting: ใน v4 แฮชที่แสดงผลจะได้รับการจัดเรียงเป็นค่าแบบ Little-Endian ใน v5 ระบบจะถือว่าเป็นค่า Big-Endian เนื่องจากการจัดเรียงสตริงไบต์ตามพจนานุกรมเทียบเท่ากับการจัดเรียงค่าแบบ Big-Endian ตามตัวเลข ไคลเอ็นต์จึงไม่จำเป็นต้องดำเนินการจัดเรียงพิเศษอีกต่อไป คุณสามารถนำการจัดเรียงแบบ Little-Endian ที่กำหนดเองออกได้หากมีการใช้งานก่อนหน้านี้ เช่น การจัดเรียงในการใช้งาน Chromium v4
- ความยาวของแฮชที่เปลี่ยนแปลงได้: ต้องอัปเดตอัลกอริทึมการถอดรหัสเพื่อรองรับความยาวของแฮชต่างๆ ที่อาจแสดงในฟิลด์ HashList.compressed_additionsไม่ใช่แค่ความยาวของแฮช 4 ไบต์ที่ใช้ใน v4 ความยาวของแฮชที่แสดงในคำตอบจะกำหนดได้โดยอิงตามHashList.metadata.hash_lengthที่แสดงจากhashLists.listหรือการตั้งชื่อรายการแฮชที่ขอจะหมายถึงขนาดแฮชที่คาดไว้ซึ่งแสดงผลจากรายการด้วย ดูรายละเอียดเพิ่มเติมเกี่ยวกับรายการแฮชได้ที่หน้าฐานข้อมูลในเครื่อง
 
การแปลงการค้นหาแฮช
ใน v4 ผู้ใช้จะใช้เมธอด fullHashes.find เพื่อรับแฮชแบบเต็ม ส่วนใน v5 จะเทียบเท่ากับเมธอด hashes.search
ควรทำการเปลี่ยนแปลงต่อไปนี้ในคำขอ
- จัดโครงสร้างโค้ดให้ส่งเฉพาะคำนำหน้าแฮชที่มีความยาว 4 ไบต์เท่านั้น
- นำออบเจ็กต์ ClientInfov4 ออกทั้งหมด แทนที่จะระบุการระบุตัวตนของไคลเอ็นต์โดยใช้ช่องเฉพาะ ให้ใช้ส่วนหัว User-Agent ที่รู้จักกันดีแทน แม้ว่าจะไม่มีรูปแบบที่กำหนดไว้สำหรับการระบุไคลเอ็นต์ในส่วนหัวนี้ แต่เราขอแนะนำให้ระบุรหัสไคลเอ็นต์และเวอร์ชันไคลเอ็นต์เดิมโดยคั่นด้วยอักขระช่องว่างหรือเครื่องหมายทับ
- นำช่อง client_statesออก ไม่จำเป็นอีกต่อไป
- ไม่จำเป็นต้องใส่ threat_typesและฟิลด์ที่คล้ายกันอีกต่อไป
ควรทำการเปลี่ยนแปลงต่อไปนี้กับการตอบกลับ
- ระบบได้นำช่อง minimum_wait_durationออกแล้ว ไคลเอ็นต์สามารถส่งคำขอใหม่ได้ทุกเมื่อตามความจำเป็น
- เราได้ลดความซับซ้อนของออบเจ็กต์ v4 ThreatMatchเป็นออบเจ็กต์FullHash
- เราได้ลดความซับซ้อนของการแคชให้เหลือระยะเวลาแคชเดียว ดูขั้นตอนข้างต้นเพื่อโต้ตอบกับแคช
