Google、大好き!API、大好き!!
何も苦労せず、ほぼ正確な”答え”が返ってくるGoogle先生のAPI。
以前、不適切な画像を検出するためにCloud Vision APIをご紹介しました。
今回は、マルウェアやフィッシングコンテンツのない安全なWEBサイトかどうかを判断してくれる「Safe Browsing API」を、PHPで利用する方法をご紹介します。
Safe Browsing APIの使い方
以下の参考サイトには、Google APIの利用登録方法から、簡単な使い方まで掲載されていますので、もし登録がお済みでない方はぜひご覧ください。
公式サイトの日本語版はなさそうですが、これまたGoogleの翻訳機能があれば問題ないでしょう。
サンプルコード
以下は、WEBサイトが不適切でないか判断をする関数を作成したものです。
public function is_safe_browse($url)
{
try {
$postUrl = ' $payload = [
'client' => [
'clientId' => [CLIENT_ID],
'clientVersion' => [CLIENT_VERSION],
],
'threatInfo' => [
"threatTypes" => [
'THREAT_TYPE_UNSPECIFIED',
'MALWARE',
'SOCIAL_ENGINEERING',
'UNWANTED_SOFTWARE',
'POTENTIALLY_HARMFUL_APPLICATION',
],
"platformTypes" => [
'PLATFORM_TYPE_UNSPECIFIED',
'WINDOWS',
'LINUX',
'ANDROID',
'OSX',
'IOS',
'ANY_PLATFORM',
],
"threatEntryTypes" => ["URL"],
"threatEntries" => ['url' => $url],
]
]; $ch = curl_init();
$timeout = 10;
curl_setopt($ch, CURLOPT_URL, $postUrl);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_REFERER, env('APP_URL'));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Connection: Keep-Alive'
]);
$data = curl_exec($ch);
$responseDecoded = json_decode($data, true);
$responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch); if ($responseCode != 200) {
return false;
}
$results_arr = json_decode($data);
if (is_array($results_arr) && count($results_arr) > 0) {
foreach ($results_arr->matches as $result) {
if ($result->threat->url == $url) {
return false;
}
}
}
} catch(Exception $e) {
report($e);
return false;
}
return true;
}
解説
上から順に解説していきます。
まずは、$postUrl
変数に格納しているURLのkey
パラメータの箇所、[GOOGLE_API_KEY]にGoogleで取得したAPIキーを記載します。
次に、$payload
変数の'threatInfo'
に配列で格納している箇所で、「脅威の種類」と「プラットフォームの種類」を設定します。
最後に設定したパラメータをcURLにセットしてAPIを叩けば、JSONで結果が帰ってきます。
脅威の種類
THREAT_TYPE_UNSPECIFIED | 不明な脅威 |
---|---|
MALWARE | マルウェアの脅威 |
SOCIAL_ENGINEERING | ソーシャルエンジニアリングの脅威 |
UNWANTED_SOFTWARE | 不要なソフトウェアの脅威 |
POTENTIALLY_HARMFUL_APPLICATION | 潜在的に有害なアプリケーションの脅威 |
引用:ThreatType | Safe Browsing APIs (v4) | Google Developersサンプルコードではすべての脅威を検出するように設定しています。
プラットフォームの種類
PLATFORM_TYPE_UNSPECIFIED | 不明なプラットフォーム |
---|---|
WINDOWS | Windowsへの脅威 |
LINUX | Linuxへの脅威 |
UNWANTED_SOFTWARE | 不要なソフトウェアの脅威 |
ANDROID | Androidへの脅威 |
OSX | OS Xにもたらされる脅威 |
IOS | iOSへの脅威 |
ANY_PLATFORM | 定義されたプラットフォームの少なくとも1つに脅威 |
ALL_PLATFORMS | 定義されたすべてのプラットフォームに脅威 |
CHROME | Chromeへの脅威 |
引用:PlatformType | Safe Browsing APIs (v4) | Google Developersサンプルコードでは、すべてのプラットフォームに1つでの脅威を検出したらFalse
を返すようにしています。
最後に
ちなみに、著者がよく利用しているPHPのフレームワーク「Laravel」のパッケージもあるようです。
パッと見た感じ、リンク先のWEBサイト安全なら遷移する、危険なサイトなら回避する、のような使い方ができそうですね。
- Original:https://minory.org/safe-browsing-api.html
- Source:Minory
- Author:管理者