IPアドレス・ネットマスクの変換・チェック・統合・除外、国判定を簡単に。

こんな機能欲しいけど、自分で作るの面倒くさい!みたいな思いつきを
是非Twitterで意見投げてみてください。
時間は掛かるかもしれませんがコツコツ頑張るかも!?
Twitterリンクは下部)

IPアドレスから地理的位置情報(GeoIPLocation)の検索機能を公開しました。

Google or AdMax Promotion (ipvtop)

APIキーのリファラ制限だけじゃマズくない?だけど制限できない難しさ。

API利用登録などで発行されるAPIキーは秘匿情報として、
決して公開すべきキーではありません。
APIキー秘匿としただけでAPIの不正利用からAPIの使用量を守る事ができるのでしょうか。
現時点では、外部プログラムから守るベストな方法は浮かんできません。

追記
その後、APIキーの指定が不要でCSEの呼び出しができる
制限なしの利用法と思われる記述を見つけ、試しています。(人柱中)

ん?やっぱりAPIキーのリファラ制限だけじゃマズくない?

プロモーション

Google or AdMax Promotion (ipvpos)

カスタム検索エンジンAPIでは「100クエリ/day」までが無料枠になっています。
この無料枠を超えれば、課金が有効ではない場合は、API利用が停止し、
課金が有効ならば、1000クエリあたり5ドルが請求されます。(1日あたり最大10kクエリ)

このAPIキーの不正使用を制限できるのか?という問題です。

APIキーの「認証情報」設定では、以下の選択肢があります。

cse_get_api_key_st14

制限の指定・APIの利用とCSEサービス有効化・環境準備

  • なし
  • HTTPリファラ―
  • IPアドレス(ウェブサーバー、cronジョブなど)
  • Androidアプリ
  • iOSアプリ

 

今まで、なんとなく「HTTPリファラ」を選択して利用してきましたが、
ふと、思ったのが当然ながらリファラ偽装は可能ですよね。

PHPによるAPIキーの不正使用とリファラ偽装例

今回、テスト用にPHPのプログラムをサイトに設置して以下のように構成しています。

認証からAPIキーには「http://ipvx.info/*」でHTTPリファラ制限を設定しています。

プログラムは簡単なもので、cURLでPHPからCSEの結果を取得して表示しています。

4行目が、APIキー
6行目が、 リファラの申告値

です。

 

このプログラムを当サイトのディレクトリ配下に設置してリファラ偽装したものと、
別サイトに設置して、 リファラ偽装したもので動作確認をします。

ドメイン プログラム リファラ値 パターン 結果
ipvx.info cse_demo.php http://ipvx.info/ 正規
cse_demo_disguise.php https://rensrv.com/ 偽装
rensrv.com cse_demo.php https://rensrv.com/ 正規
cse_demo_disguise.php http://ipvx.info/ 偽装

 

見ての通りですがPHPからリファラとして設定した「http://ipvx.info/」と、
HTTPリファラの制限として設定している「http://ipvx.info/」が一致していれば、
別にどこのドメインのサイトから呼び出しができています。

容易に想像できる話です。

要は「HTTPリファラ制限」ではこの程度の制約と言う事になります。
自サイトでプログラムを設置していれば、

当然サイトドメインはHTTPリファラ制限に設定しているだろうと推測できますし、
誰でもAPIキーが分かれば、このAPIを利用することができます。

 

APIキーは他人には口外しないし、大丈夫じゃない?

普通はAPIキーは秘匿として、他人に公開するものではありません。
一応、隠すべきものとされています。

上記のようなPHPプログラムではPHPが実行して結果を返しますので、
APIキーは基本的に知られることはありません。

 

PHPが利用する「検索キーが固定」なら何も気にする必要はありません。

しかし、URLクエリパラメータや、GET,POSTなどで「パラメータ」を受け取り、
パラメータによって検索をした結果を返すようなプログラムの場合は、

自サイト上のページからの呼び出しか、
外部の悪意あるプログラムからの呼び出しかを判断する必要があると言う事です。

APIキーが漏れなくても、悪意あるプログラムに正規のレスポンスを返していては、
実質APIが制限なく利用されてしまう事は同じなのです。

 

その判定が掘れば掘るほどカオスというか、イタチごっこになってしまいます。

以下ではそうしたスクレイピング(プログラムによるコンテンツ巡回・搾取)を、
どのように回避させるかなどを考えておられます。

webスクレイピング対策への対処について – bz0のにっき

普及して欲しくないアンチスクレイピングサービス – happyou.infoのブログ

クローラー/スクレイピング Advent Calendar 2014 – Qiita

https://www.nic.ad.jp/ja/materials/iw/2005/proceedings/T18.pdf

 

最近はヘッドレスブラウザなども利用されるようになって、
プログラムアクセスか否かの判定は一層難しくなっている様相です。

Gather-Tech.info #59: ヘッドレスChromeの判定方法

Detecting Chrome Headless

 

こうして見ていると、APIキーが秘匿にできた所で、
実行プログラム(のURL)が分かる以上は、直接アクセスを阻止することは困難です。

よく見る「$_SERVER[‘HTTP_REFERER’]」で判断すればいいというアプローチは、
当然ながら、偽装されていれば意味がありません。

上記の判定でもわかるように、
Google Search Engine API もcURLの偽装であっても許容しているのが分かります。

 

$_SERVER[‘HTTP_REFERER’]を利用してPHPで判断する方法は、気休めなのです。

 

IPアドレス制限を使えばいいじゃないか。

GoogleAPIの認証キー(APIキー)の制限には「IPアドレス指定」の項目があります。

これは特定のIPアドレスのみの要求を受け付けるという設定ですので、
サーバーに割当てられているグローバルIPを指定して利用することと思います。

 

JavaScript経由でAJAXなどでリクエストする場合には、
サーバーに届くIPアドレスは、閲覧者のグローバルIPアドレスです。
IP制限をかけた場合、全グローバルIPアドレスを設定する必要がある事になります。

ですので、PHPプログラムをサイトに設置して、
WebサーバーからのみAPIを利用する仕組みにするわけですが、

前述の通り、PHPプログラムが自サイト上のページからの呼び出しか、
外部の悪意あるプログラムからの呼び出しかを判断出来ない限り、結局は同じなのです。

 

そう考えていくと、
こうしたAPIサービスでAPIキーの不正使用(タダ乗り)を阻止するいい方法は、
今のところ浮かんではきません。

 

APIキーを秘匿にしてPHPが不正使用か判定すると言う事も困難で、

JavaScriptでクライアント側の環境から、不正使用を判定したとしても、
そのままでは、APIキーはダダ漏れという事になります。

 

不正使用を排除しつつ、Googlebotなどの必要なプログラムアクセスは許可する。

実に悩ましい限りなのです。

この結論が出るまでは、
APIの課金設定は怖くて有効化できないというのが現時点の判断です。

 


AdMax Promotion

公開日:
最終更新日:2019/06/20

シェア頂けると新機能開発の励みになります!!

最後までお読みいただきありがとうございました。
便利!と思って頂けたらシェアを是非お願いします。
ご意見・ご批判でも感じた事を気にせずご指摘ください。

アカウント新規作成の為、是非フォローもお願いします。(無言OK)

※このページでこんな情報も一緒に見れたら便利!などの
アイディア・ご意見もお聞かせください。

また弊サイトはすべて広告費と個人の自腹にて運営・開発を行っています。
皆様、お仕事中でお忙しいことと存じますが、
ご興味がおありの広告が目に留まりましたら
広告主様のサイトもご覧いただけますと励みになります。

QRコードからもこのURLを開けます。
リンク先URL: https://ipvx.info/provider-ip-zone-search/cse/ok-with-referrer-limit/


AdMax Promotion

サイト内コンテンツ
すべて展開 | すべて省略

Google or AdMax Promotion (ipvlink)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください