Google Safe Browsingってありまして。
APIがあるのでRubyからきゃつらのルールで不正と判断しているドメイン(または実行ファイル)をチェックしてみようとしました。
事前準備
- rubygems
google-api-client
をインストール - APIKEYを環境変数にいれておく
Lookupのサンプルコード
google-api-clientってほとんど動的生成なので、普通に使い方をソースから見ようとするとサッパリわかりません。
動的に生成されたらこうなるよというコードがリポジトリに一緒に上がっているので、そちらをドキュメント代わりにチェックします。
Lookupする場合、find_threat_matches
メソッドにGoogle::Apis::SafebrowsingV4::FindThreatMatchesRequest
のオブジェクトを渡すだけです。
safebrowsing_lookup.rb
require 'google/apis/safebrowsing_v4'
sb_service = Google::Apis::SafebrowsingV4::SafebrowsingService.new
sb_service.key = ENV['APIKEY']
# タイプの詳細は https://developers.google.com/safe-browsing/v4/reference/rest/ で
tr = Google::Apis::SafebrowsingV4::ThreatInfo.new(
threat_types: ["MALWARE", "SOCIAL_ENGINEERING"],
platform_types: ["ANY_PLATFORM"],
threat_entry_types: ["URL"],
threat_entries: [
{"url": "http://testsafebrowsing.appspot.com/apiv4/ANY_PLATFORM/MALWARE/URL/"}
]
)
# client_idはなるべく一意にしてねとのことですが、サンプルコードなので適当に
opts = Google::Apis::SafebrowsingV4::FindThreatMatchesRequest.new(
client: Google::Apis::SafebrowsingV4::ClientInfo.new(
client_id: "google-api-client",
client_version: "0.19.8"
),
threat_info: tr
)
res = sb_service.find_threat_matches(opts)
puts res.to_json
レスポンスのmatchesに何かしら入っていれば引っかかったということです。
ちなみにthreat_entries
のurl
はhttp://〜
のようにスキーマを含めなくてもマッチします。
$ ruby safebrowsing_lookup.rb
{
"matches": [
{
"cacheDuration": "300s",
"platformType": "ANY_PLATFORM",
"threat": {
"url": "http://testsafebrowsing.appspot.com/apiv4/ANY_PLATFORM/MALWARE/URL/"
},
"threatEntryType": "URL",
"threatType": "MALWARE"
}
]
}
余談
Google Safe Browsingの影響として身近なところでは、Let's Encryptでドメインの申請をする際、このAPIでマッチしたら所有確認の時点でお断りされるんですよ。