Migration From V4

การปรับปรุงที่สำคัญอย่างหนึ่งของ 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

ควรทำการเปลี่ยนแปลงต่อไปนี้ในคำขอ

  1. นำออบเจ็กต์ v4 ClientInfo ออกทั้งหมด แทนที่จะระบุการระบุตัวตนของไคลเอ็นต์โดยใช้ช่องเฉพาะ ให้ใช้ส่วนหัว User-Agent ที่รู้จักกันดีแทน แม้ว่าจะไม่มีรูปแบบที่กำหนดไว้สำหรับการระบุไคลเอ็นต์ในส่วนหัวนี้ แต่เราขอแนะนำให้ระบุรหัสไคลเอ็นต์และเวอร์ชันไคลเอ็นต์เดิมโดยคั่นด้วยอักขระช่องว่างหรือเครื่องหมายทับ
  2. สำหรับออบเจ็กต์ ListUpdateRequest v4 แต่ละรายการ * ค้นหาชื่อรายการ v5 ที่เกี่ยวข้องจากรายการที่ใช้ได้ แล้วระบุชื่อนั้นในคำขอ v5
    • นำฟิลด์ที่ไม่จำเป็นออก เช่น threat_entry_type หรือ platform_type
    • ฟิลด์ state ใน v4 ใช้กับฟิลด์ versions ใน v5 ได้โดยตรง คุณสามารถส่งสตริงไบต์เดียวกันกับที่จะส่งไปยังเซิร์ฟเวอร์โดยใช้ฟิลด์ state ใน v4 ใน v5 ได้โดยใช้ฟิลด์ versions
    • สำหรับข้อจำกัด v4 นั้น v5 จะใช้เวอร์ชันที่เรียบง่ายกว่าที่เรียกว่า SizeConstraints ไม่ควรใส่ช่องเพิ่มเติม เช่น region

ควรทำการเปลี่ยนแปลงต่อไปนี้กับการตอบกลับ

  1. enum ResponseType ของ v4 จะแทนที่ด้วยช่องบูลีนชื่อ partial_update
  2. ตอนนี้คุณตั้งค่าฟิลด์ minimum_wait_duration เป็น 0 หรือละเว้นได้แล้ว หากเป็นเช่นนั้น ระบบจะขอให้ไคลเอ็นต์ส่งคำขออื่นทันที กรณีนี้จะเกิดขึ้นก็ต่อเมื่อไคลเอ็นต์ระบุข้อจํากัดที่เล็กลงเกี่ยวกับขนาดการอัปเดตสูงสุดใน SizeConstraints มากกว่าขนาดฐานข้อมูลสูงสุด
  3. ตรรกะสำหรับการถอดรหัสแฮชที่เข้ารหัส 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

ควรทำการเปลี่ยนแปลงต่อไปนี้ในคำขอ

  1. จัดโครงสร้างโค้ดให้ส่งเฉพาะคำนำหน้าแฮชที่มีความยาว 4 ไบต์เท่านั้น
  2. นำออบเจ็กต์ ClientInfo v4 ออกทั้งหมด แทนที่จะระบุการระบุตัวตนของไคลเอ็นต์โดยใช้ช่องเฉพาะ ให้ใช้ส่วนหัว User-Agent ที่รู้จักกันดีแทน แม้ว่าจะไม่มีรูปแบบที่กำหนดไว้สำหรับการระบุไคลเอ็นต์ในส่วนหัวนี้ แต่เราขอแนะนำให้ระบุรหัสไคลเอ็นต์และเวอร์ชันไคลเอ็นต์เดิมโดยคั่นด้วยอักขระช่องว่างหรือเครื่องหมายทับ
  3. นำช่อง client_states ออก ไม่จำเป็นอีกต่อไป
  4. ไม่จำเป็นต้องใส่ threat_types และฟิลด์ที่คล้ายกันอีกต่อไป

ควรทำการเปลี่ยนแปลงต่อไปนี้กับการตอบกลับ

  1. ระบบได้นำช่อง minimum_wait_duration ออกแล้ว ไคลเอ็นต์สามารถส่งคำขอใหม่ได้ทุกเมื่อตามความจำเป็น
  2. เราได้ลดความซับซ้อนของออบเจ็กต์ v4 ThreatMatch เป็นออบเจ็กต์ FullHash
  3. เราได้ลดความซับซ้อนของการแคชให้เหลือระยะเวลาแคชเดียว ดูขั้นตอนข้างต้นเพื่อโต้ตอบกับแคช