快取

本文適用於下列方法:

關於快取

為減少用戶端頻寬用量,並避免 Google 受到流量尖峰影響,Lookup API 和 Update API 的用戶端都必須建立及維護威脅資料的本機快取。Lookup API 會使用快取,減少用戶端傳送至 Google 的 uris.search 要求數量。對於 Update API,快取可減少用戶端傳送至 Google 的要求數量。hashes.search下文將說明各項 API 的快取通訊協定。

Lookup API

Lookup API 的用戶端應快取每個傳回的 ThreatUrl 項目,直到 expireTime 欄位中定義的時間為止。用戶端接著必須先查詢快取,才能向伺服器發出後續的 uris.search 要求。如果先前傳回的 ThreatUrl 快取項目尚未過期,用戶端應假設該項目仍不安全。快取 ThreatUrl 項目可減少用戶端發出的 API 要求數量。

Update API

為減少使用 Update API 傳送至 Google 的 hashes.search 要求總數,用戶端必須維護本機快取。API 會建立兩種快取類型:正面和負面。

正面快取

為防止用戶端重複詢問特定不安全完整雜湊的狀態,每個傳回的 ThreatHash 都包含正向快取時間 (由 expireTime 欄位定義)。在此之前,完整雜湊可視為不安全。

負面快取

為防止用戶端重複詢問特定安全完整雜湊的狀態,回應會為所要求的前置字串 (由 negativeExpireTime 欄位定義) 定義負快取時間長度。在此時間之前,所有具有要求前置字元的完整雜湊都視為要求威脅類型安全,但伺服器傳回的不安全雜湊除外。這項快取功能非常重要,因為可避免雜湊前置字元與安全網址發生衝突,導致流量過載。

查詢快取

用戶端想檢查網址的狀態時,會先計算網址的完整雜湊值。如果本機資料庫中存在完整雜湊的前置字元,用戶端應先查詢快取,再向伺服器發出 hashes.search 要求。

首先,用戶端應檢查是否出現快取命中。如果感興趣的完整雜湊值有未過期的正向快取項目,則應視為不安全。如果正向快取項目已過期,用戶端必須傳送hashes.search要求,取得相關聯的本機前置字元。根據通訊協定,如果伺服器傳回完整雜湊值,就會視為不安全;否則就會視為安全。

如果完整雜湊沒有正向快取項目,用戶端應檢查是否有負向快取命中。如果相關聯的本機前置字串有未過期的負向快取項目,則完整雜湊會視為安全。如果負向快取項目已過期或不存在,用戶端必須傳送相關聯本機前置字元的 hashes.search 要求,並正常解讀回應。

更新快取

收到 hashes.search 回應時,應一律更新用戶端快取。 應根據 expireTime 欄位,為完整雜湊建立或更新正向快取項目。此外,也應根據回應的 negativeExpireTime 欄位建立或更新雜湊前置字元的負快取時間長度。

如果後續的 hashes.search 要求未傳回目前已快取且為正值的完整雜湊值,用戶端不必移除正值快取項目。實際上不必擔心,因為正向快取時間通常很短 (幾分鐘),可快速修正誤報。

範例情境

在下列範例中,假設 h(url) 是網址的雜湊前置字元,而 H(url) 是網址的完整雜湊。也就是說,h(url) = SHA256(url).substr(4),H(url) = SHA256(url)。

假設快取空白的用戶端造訪 example.com/,並發現 h(example.com/) 位於本機資料庫中。用戶端會要求雜湊前置字串 h(example.com/) 的完整雜湊,並收到完整雜湊 H(example.com/),以及從現在起 5 分鐘的快取到期時間 (正面) 和從現在起 1 小時的快取到期時間 (負面)。

5 分鐘的正向快取時間會告知用戶端,在不傳送另一個 hashes.search 要求的情況下,完整長度的雜湊 H(example.com/) 必須視為不安全的時間長度。如果用戶端再次造訪 example.com/,5 分鐘後必須針對該前置字串 h(example.com/) 發出另一個 hashes.search 要求。用戶端應根據新回應,重設雜湊前置字串的負向快取到期時間。

1 小時的負向快取時間會告知用戶端,除了 H(example.com/) 以外,所有共用 h(example.com/) 前置字串的完整長度雜湊,都必須視為安全。在 1 小時內,凡是 h(URL) = h(example.com/) 的網址都必須視為安全,因此不會產生 hashes.search 要求 (假設 H(URL) != H(example.com/))。

如果 fullHashes 回應包含零個相符項目,且已設定負向快取到期時間,則在指定的負向快取時間內,用戶端不得針對任何要求的前置字串發出任何 hashes.search 要求。

如果 hashes.search 回應包含一或多個相符項目,系統仍會為整個回應設定負快取到期時間。在這種情況下,單一完整雜湊的快取到期時間,表示用戶端必須假設特定完整雜湊不安全的時間長度。ThreatHash 快取時間經過後,如果要求的網址與快取中的現有完整雜湊相符,用戶端就必須發出 hashes.search 要求,重新整理該雜湊前置字串的完整雜湊。在這種情況下,系統不會套用負向快取時間。回應的負快取時間長度僅適用於 hashes.search 回應中沒有的完整長度雜湊。如果回應中沒有完整長度的雜湊值,用戶端必須等到負向快取時間結束,才能發出任何 hashes.search 要求。