開発室ブログ

Google Google API Google Safe Browsing PHP SEO 中古ドメイン

GoogleAPI バージョン移行(Safe Browsing編)

 弊社では中古ドメインの販売やSEO対策のコンサルティング等を手がけておりますが、中古ドメインの販売において仕入予定の中古ドメインを精査すべく、自社開発のツールにてドメインの事前チェックを実施し、お客様に高品質の中古ドメインを提供しております。

 このツールでは様々な角度からドメインのチェックを実施しており、その一部にGoogle Safe Browsingを利用しています。

はじめに

 ある日、ある事案についての調査中にGoogle Safe BrowsingのAPIバージョン4がリリースされていることを知りました。現在、社内ツールで使用してる従来のAPIバージョン3は2018年10月1日に廃止予定と言うことなので早急に対応することになりました。

The Safe Browsing APIs (v3) are now deprecated and will be turned down on October 1st, 2018. All Safe Browsing API clients should use the (v4) APIs going forward.

Google Safe Browsingってナニ

 簡単に説明しますとブラウザが危険なサイトへのアクセスを監視してくれる機能で、もし危険なサイトへアクセスするとこのようにブラウザが注意喚起のメッセージを表示します。詳細はGoogle Safe Browsingをご覧ください。

因みにセキュリティソフトでも同様な警告が表示されました。

v4への移行

 まずは例によって検索サイトから情報収集をしましたが、日本語で記載されている記事はGo言語による実装例がいくつかヒットするものの、PHPの実装例を見つけることが出来ず【※注】やむを得ず英文の実装例を参考にしました。

 英文と言っても殆どがコードなので臆することなく参考にさせて頂き、このブログで情報共有をすることで少しでも社会貢献(?)に寄与できたら幸いです。

 なお、既にバージョン3を実装済みという前提で記載していますので、APIキーの取得方法等の環境設定につきましては割愛させて頂きます。因みにバージョン3で運用していたAPIキーはそのままバージョン4でも使用可能です。

【※注】寄稿時点(2018年4月6日)のものです。

v3のコールシーケンス

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sb-ssl.google.com/safebrowsing/api/lookup?client=ReverseShortURL&appver=1.5.2&pver=3.1&key='.APIキー.'&url='.対象URL;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
return curl_exec($ch);

v4のコールシーケンス

$data = '{
  "client": {
    "clientId"     : "TestClient",
    "clientVersion": "1.0"
  },
  "threatInfo": {
    "threatTypes"     : ["MALWARE", "SOCIAL_ENGINEERING"],
    "platformTypes"   : ["ALL_PLATFORMS"],
    "threatEntryTypes": ["URL"],
    "threatEntries"   : [{"url": "'.対象URL.'"}]
  }
}';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://safebrowsing.googleapis.com/v4/threatMatches:find?key='.APIキー);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", 'Content-Length: ' . strlen($data)));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
return curl_exec($ch);

 大きな変更点としてはリクエストがGetからPostになりました。それに伴い様々なパラメータも追加されたようです。また、レスポンスについてはテキストからJSON構造のレスポンスとなりました。詳細はSafe Browsing Lookup API (v4)を参照願います。

v3のレスポンス

検知された脅威の種類をテキストで出力されます。

malware

v4のレスポンス

JSON形式のレスポンスになりました。詳細はSafe Browsing Lookup API (v4)を参照願います。

脅威を検知した場合

{
  "matches": [
    {
      "threatType": "MALWARE",(←検知した脅威の種類)
      "platformType": "ALL_PLATFORMS",
      "threat": {
        "url": 対象URL
      },
      "cacheDuration": "300s",
      "threatEntryType": "URL"
    }
  ]
}

脅威を検知しなかった場合

{}

移行確認

 以前はマルウェアやフィッシングサイトの一覧を公開しているサイトがあったのですが現在は閉鎖されてたり フィッシング対策協議会宛にメールでフィッシングサイトの一覧を請求するようなので、すぐに確認できる方法を模索したところGoogle Safe Browsingテストサイトがありこのサイトでテストをすることが出来ました。

 しかし、このサイトはあくまでもGoogle Safe Browsingのテスト用でありそれ以外の目的では使用出来ません。(ウィルスソフトは反応しませんでした)

 なおバージョン4からフィッシングサイトの表示がphishingからSOCIAL_ENGINEERINGと変更したようです。

マルウェアとフィッシングサイトが混在している場合の検出結果

■v3
phishing,malware

■v4
{
  "matches": [
    {
      "threatType": "MALWARE",
      "platformType": "ALL_PLATFORMS",
      "threat": {
        "url": "http%3A%2F%2Fmalware.testing.google.test%2Ftesting%2Fmalware%2F"
      },
      "cacheDuration": "300s",
      "threatEntryType": "URL"
    },
    {
      "threatType": "SOCIAL_ENGINEERING",
      "platformType": "ALL_PLATFORMS",
      "threat": {
        "url": "http%3A%2F%2Fmalware.testing.google.test%2Ftesting%2Fmalware%2F"
      },
      "cacheDuration": "300s",
      "threatEntryType": "URL"
    }
  ]
}

おわりに

 Google Safe BrowsingのAPIバージョン4のリリースから既に2年近く経過しており、旧バージョンの廃止直前に移行作業という遅い対応となりました。今更ですが、これを機に普段から情報収集に心掛けたいと思います。

RecentPost