Yahoo! Japanの Web API、アプリケーションIDを外部に晒さないようにする。

ヤフージャパンのWeb APIを使うとき、アプリケーションIDの登録が必須です。このID、APIに問い合わせを行うときには常にクエリに含めなくてはなりません。

で。

例えばスタティックマップAPI。こいつは指定した地域の地図をPNG画像(デフォルト設定の場合)で返してくれるAPIなのですが、地図を表示しようとしてページのhtmlに
<img src="http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=●アプリケーションID●&●緯度・経度などのパラメータ●" />
と直接記述したり、JavaScriptで現在位置の緯度・経度を読み取って、地図画像へのURLを動的に生成したりする場合、htmlやJavaScriptのソースを見られると、他人に自分のアプリケーションIDが丸判りなわけですよ。

まぁ他人のIDを勝手に利用して悪さをしようなどと考える人は、そうそう滅多に居ないと思いますが、それでも不正使用が心配で夜も眠れない…という人は、こんな方法があります。

全くもってグッドな方法ではないですが、APIの出力結果を表示したいページと、Yahoo! APIとの間にワンクッション置いてみます。スタティックマップを例にとるならば、

★表示したいページからパラメータを受け取ってAPIに送信、結果を受け取って、それを元のページに送信するスクリプトを自分のサーバに設置 : http://your_server.jp/getMap.php
<?php
  $lat = $_GET['lat'];
  $lon = $_GET['lon'];

  $appid = '●あなたのアプリケーションID●' ;
  $api_url = 'http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?' ;

  $result = file_get_contents( $api_url . 'appid=' . $appid . '&lat=' . $lat . '&lon=' . $lon . '&●他のパラメータ●...' );

  header( 'Content-type: image/png' ); //地図画像がPNG形式の場合
  echo $result ;
?>

★地図画像を表示したいページから、APIではなく、自分のサーバに設置したスクリプトを呼び出す
<img src="http://your_server.jp/getMap.php?lat=~&lon=~...." />
※lat : 緯度 , lon : 経度
  ...などのパラメータ

つまり、
☆地図を表示したいページ →(地図のパラメータを送る)→
 ☆自鯖に設置したスクリプト →(地図のパラメータとアプリケーションIDを送る)→
  ☆スタティックマップAPI →(地図画像をスクリプトに返す)→
   ☆自鯖に設置したスクリプト →(APIから受け取った地図画像を転送)→
    ☆地図を表示したいページに地図画像が表示される
という流れ。完全に無駄なトラフィックが発生して無駄な時間が掛かりますが、IDが誰かに漏れる心配は全くありません。

このままだと、このPHPスクリプトを誰かに発見されてしまったら、勝手にAPIアクセスの踏み台にされてしまう可能性がありますね。それを防ぐには リファラ($_SERVER['HTTP_REFERER'])を参照して、自分のページ以外からのアクセスは弾く、みたいなコードを書いておけば大丈夫。

あ、あと問い合せ結果が返ってこなかったときなどに対処するためのエラー処理も必要ですね。

ここまで神経質にならなくても大丈夫な気がするけれど。



カテゴリ: