本機資料庫

這份文件適用於下列方法:Update API (v4)threatListUpdates.fetch

資料庫設定

使用 Update API 的用戶端必須設定本機資料庫,以及對要使用的安全瀏覽清單執行初始下載作業。如要開始使用,您可以建構及部署 safebrowsing Go 套件 (或使用套件模擬自己的實作項目)。詳情請參閱 https://github.com/google/safebrowsing/

資料庫更新

為確保能防範最新威脅,強烈建議用戶端使用 threatListUpdates.fetch 方法定期更新本機安全瀏覽清單。 threatListUpdates.fetch 要求會指定要更新的清單。如果用戶端有記憶體或頻寬限制,也可以使用要求來設定更新限制 (請參閱「更新限制」一節)。threatListUpdates.fetch 回應會傳回每份清單的完整更新或部分更新,詳情請見下方說明。

完整更新

當用戶端離開 threatListUpdates.fetch 要求中的 state 欄位,或伺服器判斷需要進行完整的更新時,系統就會傳回完整更新。如果是完整更新,系統只會傳回「新增」。用戶端應先清除本機資料庫,再套用更新並執行驗證檢查

空白狀態

在用戶端傳送清單的初始要求時,系統會傳回完整更新。在本例中,要求中的 state 欄位會留空 (因為沒有可提供的值),而回應中的 newClientState 欄位會傳回本機清單的初始狀態。如果用戶端刻意在後續要求中將 state 欄位留空,系統也會傳回完整更新。這會強制進行完整的更新,並在回應的 newClientState 欄位中傳回新狀態。

伺服器決策

有時候,只有在用戶端要求部分更新時,安全瀏覽伺服器才會傳回完整更新。當用戶端最初下載某個版本的清單,然後更新為較大版本的清單時,就可能發生這種情況;伺服器只會傳回包含整個清單的完整更新。也可能會發生在用戶端長時間未下載資料並要求部分更新的情況下;同樣地,伺服器只會傳回包含整個清單的完整更新。

部分更新

當用戶端在 threatListUpdates.fetch 要求中為 state 欄位提供值時,系統會傳回部分更新 (例外情況如上所述,當伺服器確定需要完整的更新時)。如果是部分更新,系統會同時傳回新增移除。用戶端會更新本機資料庫中的清單 (新增前套用移除),然後執行驗證檢查

新增

附加內容是應新增至本機資料庫的 SHA256 雜湊前置字串。大多數雜湊前置字串的長度為 4 個位元組,但有些雜湊前置字串的長度可能介於 4 到 32 個位元組之間。因此,系統可能會傳回多組新增內容,例如一組包含 4 位元組的前置字串,另一個包含 5 位元組前置字串。

如果用戶端支援壓縮,回應可能會使用 Rice 壓縮技術壓縮。不過,只有 4 位元組雜湊的前置字串會經過壓縮。系統一律會以未壓縮的原始格式傳送較長的雜湊前置字串 (請參閱壓縮一節)。

移除

「移除」是指按照字母順序排序的用戶端資料庫中,從零為基礎的索引,指向應從本機資料庫中移除的項目。系統只會傳回一組移除項目。

如果用戶端支援壓縮,系統會傳回「riceHashhes」和「rice indices」。如果不支援壓縮,系統會傳回「原始雜湊」和「原始索引」(請參閱壓縮一節)。

驗證檢查

當系統傳回 threatListUpdates.fetch 回應 (無論是完整更新或部分更新) 時,用戶端應會執行驗證檢查。

用戶端會先更新本機資料庫中的清單 (在新增內容前套用移除)。接著,用戶端會計算 (依字母順序排序) 本機清單的 SHA256 雜湊,然後將其與回應中傳回的總和檢查碼進行比較。如果這兩個值相同,系統會將安全瀏覽清單視為「正確」。

如果這兩個值不相等,則會將安全瀏覽清單視為「損毀」。用戶端必須清除資料庫中的清單,並以空白字串的 state 欄位重新發出第二次更新;這會強製完成完整的更新,並傳回全新的清單和狀態。