Safe Browsing Update API (v4)

總覽

使用 Update API 可讓用戶端應用程式下載 Safe Browsing 清單的雜湊版本,並儲存至本機資料庫中。接著就可以在本機檢查網址。只有在 用戶端必須將要求傳送至安全瀏覽伺服器,才能驗證 是否將該網址納入「安全瀏覽」清單。

使用 Update API 前,您必須先設定本機資料庫。安全瀏覽功能 可用來展開行動的 Go 套件。詳情請參閱下方的「資料庫設定」一節: 本機資料庫

更新本機資料庫

為保持最新狀態,用戶端必須定期更新本機資料庫中的安全瀏覽清單。為節省頻寬,用戶端會下載網址的雜湊前置字串,而非 原始網址舉例來說,如果「www.badurl.com/」位於「安全瀏覽」清單上,用戶端則會下載 該網址的 SHA256 雜湊前置字串,而非網址本身。在大多數情況下,雜湊前置字串的長度為 4 個位元組,也就是說,下載單一清單項目的平均頻寬成本為 4 個位元組 (經過壓縮)。

如要更新本機資料庫中的安全瀏覽清單,請將 HTTP POST 要求傳送至 threatListUpdates.fetch 方法:

  • HTTP POST 要求包含要與各種用戶端更新的清單名稱 以符合記憶體和頻寬的限制
  • HTTP POST 回應會傳回完整更新或部分更新。回應 可能傳回最短等待時間。

例如: ThreatListUpdates.fetch

HTTP POST 要求

在以下範例中,系統會要求單一安全瀏覽清單的更新。

要求標頭

要求標頭包含要求網址和內容類型。請記得將網址中的 API_KEY 替換為 API 金鑰。

POST https://safebrowsing.googleapis.com/v4/threatListUpdates:fetch?key=API_KEY HTTP/1.1
Content-Type: application/json

要求主體

要求主體包含用戶端資訊 (ID 和版本) 和更新資訊 (清單名稱、清單狀態和用戶端限制)。詳情請參閱 threatListUpdates.fetch 要求主體 以及本程式碼範例的說明

{
  "client": {
    "clientId":       "yourcompanyname",
    "clientVersion":  "1.5.2"
  },
  "listUpdateRequests": [{
    "threatType":      "MALWARE",
    "platformType":    "WINDOWS",
    "threatEntryType": "URL",
    "state":           "Gg4IBBADIgYQgBAiAQEoAQ==",
    "constraints": {
      "maxUpdateEntries":      2048,
      "maxDatabaseEntries":    4096,
      "region":                "US",
      "supportedCompressions": ["RAW"]
    }
  }]
}
客戶資訊

clientIDclientVersion 欄位應明確識別用戶端實作項目,而非個別使用者。(用戶端資訊會用在伺服器端記錄中。您可以為用戶端 ID 選擇任何名稱,但建議您選擇代表用戶端真實身分的名稱,例如公司名稱,並以小寫字母呈現為一個字詞。)

安全瀏覽清單

threatTypeplatformTypethreatEntryType 欄位 會結合識別 (名稱)「安全瀏覽」清單。本範例有一個清單: 惡意軟體/WINDOWS/URL。傳送請求之前,請確認您指定的類型組合有效 (請參閱安全瀏覽清單)。

用戶端狀態

state 欄位會保留安全瀏覽清單的目前用戶端狀態。(用戶端狀態會在 newClientState 欄位的 threatListUpdates.fetch 回應)。 針對初始更新,請將 state 欄位留空。

大小限制

maxUpdateEntries 欄位會指定用戶端可以管理的更新總數 (在 例如 2048)。maxDatabaseEntries 欄位會指定本機資料庫可管理的項目總數 (在本例中為 4096)。客戶應設定大小限制 以保護記憶體和頻寬限制,並排除清單上的問題 成長率。詳情請參閱「更新限制條件」。

支援的壓縮方式

supportedCompressions 欄位會列出用戶端支援的壓縮類型。在這個範例中,用戶端只支援未壓縮的原始資料。不過,「安全瀏覽」功能支援 壓縮類型 (請參閱壓縮)。

HTTP POST 回應

在這個範例中,回應會使用要求的壓縮類型,傳回安全瀏覽清單的部分更新內容。

回應標頭

回應標頭包含 HTTP 狀態碼 以及內容類型如果用戶端收到 HTTP/200 以外的狀態碼,就必須進入輪詢模式 (請參閱「要求頻率」)。

HTTP/1.1 200 OK
Content-Type: application/json

回應主體

回應主體包含更新資訊 (清單名稱、回應類型、要套用至本機資料庫的新增和移除項目、新的用戶端狀態,以及總和檢查碼)。在這個範例中,回應也包含最短等待時間。如要 請參閱 threatListUpdates.fetch 回應主體 以及本程式碼範例的說明

{
  "listUpdateResponses": [{
    "threatType":      "MALWARE",
    "threatEntryType": "URL",
    "platformType":    "WINDOWS",
    "responseType" :   "PARTIAL_UPDATE",
    "additions": [{
      "compressionType": "RAW",
      "rawHashes": {
        "prefixSize": 4,
        "rawHashes":  "rnGLoQ=="
      }
    }],
    "removals": [{
      "compressionType": "RAW",
      "rawIndices": {
        "indices": [0, 2, 4]
      }
    }],
    "newClientState": "ChAIBRADGAEiAzAwMSiAEDABEAFGpqhd",
    "checksum": {
      "sha256": "YSgoRtsRlgHDqDA3LAhM1gegEpEzs1TjzU33vqsR8iM="
    }
  }],
  "minimumWaitDuration": "593.440s"
}
資料庫更新

responseType 欄位會顯示部分更新或完整更新。在這個範例中,系統會傳回部分更新,因此回應會同時包含新增和移除項目。可能有許多 新增,但僅限一組移除 (請參閱資料庫更新)。

新的用戶端狀態

newClientState 欄位會保留新版 Safe Browsing 清單的新用戶端狀態。用戶端必須儲存新的用戶端狀態,才能在後續的更新要求中使用 (state 欄位的 threatListUpdates.fetch 要求 或是顯示「clientStates」欄位中 fullHashes.find 要求)。

檢查碼機制

用戶端可透過總和檢查碼驗證本機資料庫是否有任何損毀情形。如果總和檢查碼不相符,用戶端就必須清除資料庫,並以空白 state 欄位重新發布更新。不過,在這種情況下,用戶端仍必須遵循更新時間間隔 (請參閱「要求頻率」)。

最短等待時間長度

minimumWaitDuration 欄位表示用戶端必須等待 593.44 秒 (9.89 分鐘) 才能傳送其他更新要求。請注意,回應中可能會包含等候時間 (請參閱「要求頻率」)。

檢查網址

如要檢查網址是否在安全瀏覽清單中,用戶端必須先計算網址的雜湊和雜湊前置字串 (請參閱「網址和雜湊」)。然後查詢本機資料庫,判斷是否有相符項目。如果雜湊前置字元「是」 不會儲存在本機資料庫中,那麼系統會將網址視為安全 (而不是 。

如果本機資料庫中雜湊前置字串 (雜湊前置字串衝突),用戶端就必須將雜湊前置字串傳送至安全瀏覽服務伺服器進行驗證。伺服器會傳回包含指定雜湊前置字串的所有完整 SHA 256 雜湊。 如果其中一個完整長度的雜湊與問題網址的完整長度雜湊相符,系統就會將該網址視為不安全。如果所有長度的雜湊都不符合完整的雜湊值 當有爭議的網址,系統會將該網址視為安全網址。

Google 不會在任何時候得知你正在檢查的網址。Google 會學習網址的雜湊前置字串,但雜湊前置字串無法提供太多關於實際網址的資訊。

如要檢查某個網址是否列在「安全瀏覽」清單中,請將 HTTP POST 要求傳送至 fullHashes.find 方法:

  • HTTP POST 要求最多可包含 500 個威脅項目。
  • HTTP POST 要求包含要檢查的網址雜湊前置字串。建議用戶端將多個威脅項目批次處理至單一要求,以降低頻寬用量。
  • HTTP POST 回應會傳回相符的完整雜湊,以及正值和 減少快取持續時間回應也傳回最短等待時間。

範例:fullHashes.find

HTTP POST 要求

在以下範例中,系統會傳送兩份安全瀏覽清單和三個雜湊前置字元, 以便進行比較及驗證

要求標頭

要求標頭包含要求網址和內容類型。記得更換 網址中 API_KEY 的 API 金鑰。

POST https://safebrowsing.googleapis.com/v4/fullHashes:find?key=API_KEY HTTP/1.1
Content-Type: application/json

要求主體

要求主體包含用戶端資訊 (ID 和版本)、用戶端狀態,以及威脅資訊 (清單名稱和雜湊字首)。如果是 JSON 要求,雜湊前置字串必須 會以 base64 編碼格式傳送。 詳情請參閱 fullHashes.find 要求主體 以及本程式碼範例的說明

{
  "client": {
    "clientId":      "yourcompanyname",
    "clientVersion": "1.5.2"
  },
  "clientStates": [
    "ChAIARABGAEiAzAwMSiAEDABEAE=",
    "ChAIAhABGAEiAzAwMSiAEDABEOgH"
  ],
  "threatInfo": {
    "threatTypes":      ["MALWARE", "SOCIAL_ENGINEERING"],
    "platformTypes":    ["WINDOWS"],
    "threatEntryTypes": ["URL"],
    "threatEntries": [
      {"hash": "WwuJdQ=="},
      {"hash": "771MOg=="},
      {"hash": "5eOrwQ=="}
    ]
  }
}
客戶資訊

clientIDclientVersion 欄位應明確識別用戶端實作項目,而非個別使用者。(用戶端資訊會用在伺服器端記錄中。您可以為 用戶端 ID,但建議選用可代表用戶端真實身分的名稱,例如 您的公司名稱,會以全部的小寫字母呈現。)

所有用戶端狀態

clientStates 欄位會保留用戶端當地資料庫中所有安全瀏覽清單的用戶端狀態。(用戶端狀態會傳回至 threatListUpdates.fetch 回應newClientState 欄位)。

安全瀏覽清單

threatTypesplatformTypesthreatEntryTypes 欄位會結合,用於識別 (命名) 安全瀏覽清單。這個例子有兩份清單:MALWARE/WINDOWS/URL SOCIAL_ENGINEERING/WINDOWS/URL。傳送請求前,請確定您的類型組合 是否有效 (請參閱安全瀏覽清單)。

威脅雜湊前置字串

ThreatEntry 陣列包含您要檢查的網址的雜湊前置字串。 hash 欄位必須包含本機資料庫中的確切雜湊字首。適用對象 舉例來說,如果本機雜湊前置字元長度為 4 個位元組,威脅項目長度則為 4 個位元組。如果 本機雜湊前置字元超過 7 個位元組,威脅項目長度必須為 7 個位元組。

在這個例子中,要求包含三個雜湊前置字元。系統會將所有前置字串與安全瀏覽清單進行比對,判斷是否有相符的完整雜湊。

注意:Update API 和 fullHashes.find 方法應一律使用 hash 欄位。 一律為 URL 欄位 (請參閱 ThreatEntry)。

HTTP POST 回應

在下例中,回應會傳回由安全瀏覽清單分類的相符資料, 以及快取和等待持續時間

回應標頭

回應標頭包含 HTTP 狀態碼和內容類型。如果用戶端收到 HTTP/200 以外的狀態碼,就必須輪詢 (詳情請參閱 要求頻率)。

HTTP/1.1 200 OK
Content-Type: application/json

回應主體

回應主體包含比對資訊 (清單名稱和完整長度雜湊、可用的中繼資料和快取時間長度)。在這個範例中,回應主體也會包含最短等待時間。詳情請參閱 fullHashes.find 回應主體,以及程式碼範例後方的說明。

{
  "matches": [{
    "threatType":      "MALWARE",
    "platformType":    "WINDOWS",
    "threatEntryType": "URL",
    "threat": {
      "hash": "WwuJdQx48jP-4lxr4y2Sj82AWoxUVcIRDSk1PC9Rf-4="
    },
    "threatEntryMetadata": {
      "entries": [{
        "key": "bWFsd2FyZV90aHJlYXRfdHlwZQ==",  // base64-encoded "malware_threat_type"
        "value": "TEFORElORw=="  // base64-encoded "LANDING"
       }]
    },
    "cacheDuration": "300.000s"
  }, {
    "threatType":      "SOCIAL_ENGINEERING",
    "platformType":    "WINDOWS",
    "threatEntryType": "URL",
    "threat": {
      "hash": "771MOrRPMn6xPKlCrXx_CrR-wmCk0LgFFoSgGy7zUiA="
    },
    "threatEntryMetadata": {
      "entries": []
    },
    "cacheDuration": "300.000s"
  }],
  "minimumWaitDuration": "300.000s",
  "negativeCacheDuration": "300.000s"
}
相符組合

Match 物件會傳回兩個雜湊前置字串相符的完整長度雜湊。網址 與這些雜湊對應的一律視為不安全。系統未找到第三個雜湊前置字串的相符項目,因此不會傳回任何內容;系統會將對應此雜湊前置字串的網址視為安全。

請注意,這個範例會將一個完整雜湊和一個雜湊前置字元進行比對。不過 對應至同一個雜湊前置字元的多個完整雜湊。

中繼資料

threatEntryMetadata 為選填欄位,提供威脅的其他相關資訊 比對。目前,中繼資料可用於 MALWARE/WINDOWS/URL 安全瀏覽清單 (請參閱「中繼資料」)。

快取時間長度

cacheDurationnegativeCacheDuration 欄位會指出金額 都會產生雜湊值 視為不安全或安全 (請參閱「快取」一節)。

最短等待時間

minimumWaitDuration 欄位表示用戶端必須先等待 300 秒 (5 分鐘) 再傳送一次 FullHash 要求。請注意,回應中可能會包含等候時間 (請參閱「要求頻率」)。