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. สำหรับออบเจ็กต์ v4 ListUpdateRequest แต่ละรายการ ให้ทำดังนี้
    • ค้นหาชื่อรายการ 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 สำหรับจำนวนเต็ม 32 บิต ความแตกต่างคือข้อมูลที่เข้ารหัสจะเข้ารหัสด้วยเอนเดียนเนสที่แตกต่างกัน ทั้งใน v4 และ v5 ระบบจะจัดเรียงคำนำหน้าแฮชแบบ 32 บิตตามลำดับพจนานุกรม แต่ใน v4 ระบบจะถือว่าคำนำหน้าเหล่านั้นเป็นแบบ Little Endian เมื่อจัดเรียง ในขณะที่ใน v5 ระบบจะถือว่าคำนำหน้าเหล่านั้นเป็นแบบ Big Endian เมื่อจัดเรียง ซึ่งหมายความว่าไคลเอ็นต์ไม่จำเป็นต้องทำการจัดเรียงใดๆ เนื่องจาก Lexicographic Sorting เหมือนกับการจัดเรียงตัวเลขที่มี Big Endian ดูตัวอย่างการเรียงลำดับนี้ในการติดตั้งใช้งาน v4 ของ Chromium ได้ที่นี่ คุณนำการจัดเรียงดังกล่าวออกได้
  4. คุณจะต้องใช้อัลกอริทึมการถอดรหัส Rice สำหรับความยาวแฮชอื่นๆ ด้วย

การแปลงการค้นหาแฮช

ใน 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. เราได้ลดความซับซ้อนของการแคชให้เหลือระยะเวลาแคชเดียว ดูขั้นตอนข้างต้นเพื่อโต้ตอบกับแคช