JavaScriptで安易にAPIキーを使っちゃいけない

1267752_24260920.jpg

 具体的には、twitter公式短縮URLサービス、bitlyさんのAPIなんだけど。
このAPIを使うためには、bitlyにユーザー登録して、APIキーというのを取得します。で、そのユーザー名とAPIキーがあれば、

http://api.bit.ly/shorten?version=2.0.1&login=[ユーザー名]&apiKey=[API Key]&longUrl=[目的のURL]

というようなURLにアクセスすることで短縮URLを生成することが出来ます。

問題なのは、このAPIキーをJavaScriptでも使うことが想定されていることで。

JavaScriptで使うということは、ブラウザでソースを見たらユーザー名もAPIキーも丸わかりなのに、堂々と使っている方が結構おられます。

悪用シナリオ1

 被害者Aさんが、JavaScriptでbitlyAPIを使ったWEBページを開設していたとします。
スパム業者がやってきて、Aさんのページからユーザー名とAPIキーを拾います。
スパム業者は、このユーザー名とAPIキーを使ってスパムページへの短縮URLを生成して、スパムメールに貼り付けて送信しました。
数日すると、このURLはスパムメールであるという通報がbitlyに届くので、該当の短縮URLは凍結されます。
ついでに、スパム生成に使われたAさんのアカウントも凍結される可能性が高いですよね。悪くすると、Aさんはスパムメールの送信者と疑われてしまうかも知れません。

悪用シナリオ2

悪意のある第三者Bが、Aさんのページからユーザー名とAPIキーを拾います。
Bは、Aさんのユーザー名とAPIキーを使ってアダルトサイトの短縮URLを生成しました。
Bさんはこういう風に公表します。「あれ?Aさんこんなページも見てるんだぁ!やーい、エッチエッチ!」
Aさんにとって身に覚えのない話ではありますが、自分の生成履歴にある以上、なかなか説明の難しい立場に追い込まれてしまいました。

対策

 本来ならば、bitlyがAPIキーの仕様を変えて、登録されたドメイン以外からアクセスがあったらはじいてしまうようになっているべきだと思います。
googleMapsとかはそうなっています。

でも、公式フォーラムに出ている指摘を見ると、「そんなのいいじゃない、気になるならJavaScript以外から使えば?」と思う人もいらっしゃるみたいです。

上記のようなシナリオは困るよね、と思う方は、bit.lyのAPIをJavaScriptから直接使うのではなくて、PHPやRubyなどのサーバ側で動作する言語から使うことをオススメします。

[PHP]bitlyのAPIKeyを遮蔽する方法まとめ-RinGoonPOP!!