読者です 読者をやめる 読者になる 読者になる

しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Facebook の Graph API 視点から自分新聞が何をやっているのか調べてみた

Facebook

もう年末なので、まあどこからともなく Facebook 使ってると自分新聞の記事が流れてきます。個人的に面白いのでやってるんですが、まあ毎年こういう記事が上がってきます。

2014年、今年もやってきた自分新聞を使っちゃった方へ | ノマサラ日記(ノマド的サラリーマンの日記)

結局、この記事は「個人情報を抜かれる!友達の情報も抜かれる!危険!!」としか書いてないので、正直なところ中身は無いに等しいです。危機感煽ってアフィリエイトに誘導しているように見えますし。

確かにアプリの情報を確認すると友達リストにアクセスをしていることは確認できます。

f:id:shiba-yan:20141222165744p:plain

必要だからアクセスしているのか、単に情報を収集したいからアクセスしているのかは区別がつきません。これだとちょっと心配に思うかもしれませんね。

Facebook の Graph API について多少の知識があるので、その視点から自分新聞の挙動を調べてみました。まずはみんなが疑うログイン画面から。

f:id:shiba-yan:20141222163538p:plain

一目見ただけで、このアプリは Graph API v1.0 を使っていることがわかります。理由はどの情報を提供するかをユーザーが選択できないからです。

このダイアログが表示されている時の URL を調べることで、実際のパーミッションがわかります。

https://www.facebook.com/dialog/oauth?client_id=225159390972055&redirect_uri=https%3A%2F%2Fwww.jibunshimbun.com%2Fjibunshimbun2014%2Fauth%2Ffacebook%2Fcallback%2Ffb&scope=user_status%2Cuser_photos%2Cread_stream%2Cuser_videos

この URL の中でも scope に指定されているのが、アプリが要求しているパーミッションです。わかりやすいように書き出してみると以下の 4 つになります。

  • user_status
  • user_photos
  • read_stream
  • user_videos

名前から何にアクセスするのかわかる感じですね。基本的には現在のユーザーが投稿したテキスト、写真、動画にアクセスするためのパーミッションです。というか、この類のアプリの中では要求しているパーミッションは少ない方な気がします。メールアドレスとか欲しがりそうなのに要求してきてません。

友達リストが含まれてないのはおかしいと思う人もいそうですが、ユーザーの公開プロフィールと友達リストは Graph API v1.0 ではデフォルトで付いてくるからです。

https://developers.facebook.com/tools/explorer/

実際にどのような情報にアクセスできるかを確認するために、Graph API Explorer を使って同じパーミッションを取得した状態で試してみます。ちなみに Graph API v1.0 には古いアプリ ID を持っていないとアクセスできないので注意が必要ですね。

要求されていたパーミッションにチェックを入れていきます。

f:id:shiba-yan:20141222164400p:plain

Get Access Token をクリックすると、自分新聞と同じ内容を取得するダイアログが表示されます。

f:id:shiba-yan:20141222164409p:plain

余談になりますが、警告メッセージに書いてある通り、Graph API v1.0 は 2015/4/30 で使えなくなるので、こういった騒ぎも今年限りになるんでしょうかね。

OK をクリックすると、アクセストークンの取得が完了するので、実際に Graph API を叩けるようになります。では、みんなが気にしているであろう友達リストでどのような情報が取れるのか見てみましょう。

f:id:shiba-yan:20141222174324p:plain

友人の Facebook Id と名前が取得できました。思ったより情報が少ないので、もうちょっと頑張ります。

ここからさらに Facebook Id を使ってユーザーの情報を取ることができます。

f:id:shiba-yan:20141222174935p:plain

情報としては名前と性別、そして Facebook 上での URL ぐらいですかね。あとはロケールが ja_KS になっているので、このおっさんは関西弁で Facebook を使っていることがわかるぐらいです。*1

メールアドレスとか住所とか電話番号が取れると思っていた人は、少なからずいるのではないでしょうか?

あえて最初の方に書かなかったんですが、Facebook のパーミッションはとても細かく設定されているので、友達の情報を取得するためのパーミッションだけでも以下の画像のようにたくさんあります。

f:id:shiba-yan:20141222172649p:plain

このあたりをごっそり要求していれば、流石にそれはかなり怪しいアプリと言えそうです。

適当なまとめとしては、友達リストとしてはユーザーの Facebook Id と名前が取れて、ユーザーごとに API を叩くと公開プロフィールが取れる。という感じです。友達リストと公開プロフィールを提供しない方法は Graph API v1.0 では用意されていないので、嫌な場合は使わないという選択肢しかありません。*2

最後になりましたが、公開プロフィールと友達リストのパーミッションはデフォルトで付いているので、これまで使ってきたアプリがこっそり裏で情報を取得していないとは言えない。ということを書いておきます。*3

追記

ブコメで以下のような指摘を頂いたので追記。友達に迷惑がかかりますという部分に引っ掛かりを感じたので、特にそのあたり触れてませんでした。

Facebook の Graph API 視点から自分新聞が何をやっているのか調べてみた - しばやん雑記

read_streamやuser_photosがあるから限定公開の投稿や写真なんかをアプリを削除しない限り取得できうるんだけど、そういうことに対する注意喚起をしないのはなぜかしら?

2014/12/23 11:35

確かに指摘されているように、ユーザーがアップロードした写真や動画にアクセスする権限をこのアプリは持ちますが、アプリを削除しない限り取得できるというのは間違い。

Facebook のアクセストークンは普通に使うと 1,2 時間で有効期限が切れるのと、fb_exchange_token を使って有効期間が長いトークンに交換したとしても 60 日が限度です。当然ながらアクセストークンが切れると、ユーザーが再度ログインしない限り更新は出来ません。*4

とは言え、今回のアプリの場合は定期的に使うものでもないですし、使い終わった後にアプリ一覧から削除しておけば良いでしょう。

*1:これは個人情報扱いでいいのだろうか?(白目

*2:v2.0 からは提供する情報をユーザーが選択可能になってます

*3:デフォルトで付いてきているので、Facebook 的にはどうでもいい情報扱いな感はある

*4:現実的に考えて使ったユーザーの画像、動画をアーカイブしたとしても相手には何のメリットもない