การปรับปรุงที่สำคัญอย่างหนึ่งของ 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 ที่รู้จักกันดี แม้ว่าจะไม่มีรูปแบบที่กำหนดไว้สำหรับการระบุไคลเอ็นต์ในส่วนหัวนี้ แต่เราขอแนะนำให้ระบุรหัสไคลเอ็นต์และเวอร์ชันไคลเอ็นต์เดิมโดยคั่นด้วยอักขระช่องว่างหรือเครื่องหมายทับ - สำหรับออบเจ็กต์ v4
ListUpdateRequest
แต่ละรายการ ให้ทำดังนี้- ค้นหาชื่อรายการ 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 สำหรับจำนวนเต็ม 32 บิต ความแตกต่างคือข้อมูลที่เข้ารหัสจะเข้ารหัสด้วยเอนเดียนเนสที่แตกต่างกัน ทั้งใน v4 และ v5 ระบบจะจัดเรียงคำนำหน้าแฮชแบบ 32 บิตตามลำดับพจนานุกรม แต่ใน v4 ระบบจะถือว่าคำนำหน้าเหล่านั้นเป็นแบบ Little Endian เมื่อจัดเรียง ในขณะที่ใน v5 ระบบจะถือว่าคำนำหน้าเหล่านั้นเป็นแบบ Big Endian เมื่อจัดเรียง ซึ่งหมายความว่าไคลเอ็นต์ไม่จำเป็นต้องทำการจัดเรียงใดๆ เนื่องจาก Lexicographic Sorting เหมือนกับการจัดเรียงตัวเลขที่มี Big Endian ดูตัวอย่างการเรียงลำดับนี้ในการติดตั้งใช้งาน v4 ของ Chromium ได้ที่นี่ คุณนำการจัดเรียงดังกล่าวออกได้
- คุณจะต้องใช้อัลกอริทึมการถอดรหัส Rice สำหรับความยาวแฮชอื่นๆ ด้วย
การแปลงการค้นหาแฮช
ใน v4 ผู้ใช้จะใช้เมธอด fullHashes.find เพื่อรับแฮชแบบเต็ม ส่วนใน v5 จะเทียบเท่ากับเมธอด hashes.search
ควรทำการเปลี่ยนแปลงต่อไปนี้ในคำขอ
- จัดโครงสร้างโค้ดให้ส่งเฉพาะคำนำหน้าแฮชที่มีความยาว 4 ไบต์เท่านั้น
- นำออบเจ็กต์
ClientInfo
v4 ออกทั้งหมด แทนที่จะระบุการระบุตัวตนของไคลเอ็นต์โดยใช้ช่องเฉพาะ ให้ใช้ส่วนหัว User-Agent ที่รู้จักกันดี แม้ว่าจะไม่มีรูปแบบที่กำหนดไว้สำหรับการระบุไคลเอ็นต์ในส่วนหัวนี้ แต่เราขอแนะนำให้ระบุรหัสไคลเอ็นต์และเวอร์ชันไคลเอ็นต์เดิมโดยคั่นด้วยอักขระช่องว่างหรือเครื่องหมายทับ - นำช่อง
client_states
ออก ไม่จำเป็นอีกต่อไป - ไม่จำเป็นต้องใส่
threat_types
และฟิลด์ที่คล้ายกันอีกต่อไป
ควรทำการเปลี่ยนแปลงต่อไปนี้กับการตอบกลับ
- ระบบได้นำช่อง
minimum_wait_duration
ออกแล้ว ไคลเอ็นต์สามารถส่งคำขอใหม่ได้ทุกเมื่อตามความจำเป็น - เราได้ลดความซับซ้อนของออบเจ็กต์ v4
ThreatMatch
ให้เป็นออบเจ็กต์FullHash
- เราได้ลดความซับซ้อนของการแคชให้เหลือระยะเวลาแคชเดียว ดูขั้นตอนข้างต้นเพื่อโต้ตอบกับแคช