訪問者のTwitterアカウントをWebサイトが知る方法について

覚えている人もいるだろうけど、その昔、Twitterには「WWWあしあと」とも言うべき機能(というよりも欠陥に近い)があった。要は、ユーザ自身のタイムラインのツイート情報をWebブラウザ上のJavaScriptからとってこれたため、どのTwitterユーザがWebサイトに訪問しているかをまったく簡単に特定することができたのだが、残念ながらというかやっぱりねというか、Twitterがメジャーになるにつれてそのような完全プライバシー無視な機能は(おそらく良識により)排除されていった。

その後、OAuthによるアクセス承認の仕組みがTwitterより提供されることで、外部Webサイトが訪問者のTwitter上のアイデンティティ情報をオフィシャルに許された形で知ることができるようになった。これは、情報を取得する前にユーザの同意を得ることが前提なため、全てのサイトにTwitterIDが垂れ流しになっている先のような状態に比べれば比較的プライバシーには配慮されている。

つまり、現在のTwitter

  • まったく知らないサイトに自分のTwitterアカウントが勝手に知られることはない
  • もしサイトにTwitterアカウントを教えたい場合には、ユーザが同意した上でサイトごとにその情報を提供する仕組みがある

という状態であるといえる。

しかしながら、現在でも、ユーザにはその意図がないにもかかわらず、WebサイトがそのユーザのTwitter アカウント情報を知ることができる場合があることを、先ほど確認したので、ブログに書く。

Twitterアカウントが特定されるケース

どのような場合にTwitterアカウントが知られてしまうのかというと、そのサイトに設置されたTwitterTweetボタンを利用して、ツイートを行った場合である。

通常ソーシャル共有ボタンを設置したサイトは、それがFacebookにせよはてブあるいはMixiチェックにせよ、そのWebサイトの訪問者が実際にソーシャルメディアに対して投稿を行ったのか、あるいは誰がいつ投稿したのかまではわからないようになっている。これは実際の投稿画面がそのWebサイトではなくそれぞれのソーシャルメディアが提供するWebページ上で提供されるため、元のWebサイトの側からはSame-Origin Policyによりアクセスが不可能なためだ。Facebookのいいねボタンの場合はボタン自体がIFRAMEで提供されているのでわかりにくいが、Facebookドメインに属したページとなっており、Webサイトの管理の及ぶ外になっている。

ところが、TwitterTweetボタンの場合には、Web Intent JavaScript Eventという、ユーザがTweetを投稿したことをボタンを設置した元のページに対して通知する仕組みが提供されている。

https://dev.twitter.com/docs/intents/events

このイベント通知には、投稿者のTwitterアカウント情報こそ含まれていないものの、イベントの通知されたタイミングによって、ツイートが投稿された時刻を1秒程度の誤差の範囲で知ることができる。そして、該当するURLの投稿履歴から、その時刻にツイートされたステータスを特定することにより、そのステータスの投稿者=Webサイトにアクセスしているユーザとして特定できる、ということになる。

実証コード

実際にこれが可能であることを確かめたコードをこちらに置いておく。

http://stomita-lab.s3.amazonaws.com/twitter-id-detect/estimate.html

上記サイトのTweetボタンをおしてツイートを投稿し、しばらく待つと、自分のTwitterアカウントがページ内に表示される。

まあ別に何かしているわけではないので構わないのだが、慎重な方やあまりTLを汚したくないけれども試したい場合は、適当なダミーアカウントでTwitterにログインした上で利用されたほうがいいかもしれない。

注意事項

アカウント推定の仕組み上、同一タイミングに同じURLへの投稿が重なると、間違って特定される場合がある。ただし数秒の間にツイートが集中するというのは、あり得ないことではないし無視はできないが、全体からすれば稀であると思われる。むしろ、その他の場合にはほぼ確実にアカウントの特定が可能であるというところが注目すべき点である。そしてもちろん、同一のユーザセッションから幾つかのツイートが得られる場合は、それをもとにして精度を上げることができる。

問題についての考察

まず、自分の意見では、このこと(Webサイトが訪問者のTwitterアカウント情報を同意なく知ることができること)は憂慮すべきことである、と考えている。ただ単にプライバシーが毀損される可能性だけでなく、おそらくこのままだとこれを利用する人が多く出てくるだろう、という意味でだ。

何が問題となるか思い至らない場合のために、一つ例を上げておく。

もしあなたがとあるECサイトを利用していて、そこでは以前に自分の個人的な趣味(あまりおおっぴらにしたくない類の)の製品を閲覧し購入していたとする。そして、そのサイトで、ふと目に止まった家電製品が大変気に入ったので、その商品の横についていたTweetボタンを押して、自分のTL上に商品のURLを紹介したとする。ここで、そのECサイトはそのツイート情報から得られるTwitterアカウント情報と、ECサイトにアクセスしているユーザの閲覧・購買履歴を付きあわせることができてしまう。(そしてその後なぜかあなたのTwitterアカウントには自分の隠れた趣味に関するメンションが多く届くことになるかもしれない)

なお、訪問者のTwitterアカウント情報を利用したいと考えている人が多いだろう、というのは個人的な感想ではあるが、おそらく間違いないと思う。現在、Webサイトを運営する事業者は、訪問者のソーシャルなアイデンティティ情報を利用することで、より機会を多くすることができると考えている。彼ら曰く、よりよいカスタマーサービスを行うために、あるいはインフルエンサーとなり得る顧客を把握するために、それらは必要となるし、実際にそれらを活用したサービスを提供しようと意欲的に取り組んでいるところも多くある。

しかしながら、そういった情報の取得は、必ずユーザの同意を得た上で行うのが原則である。今回の場合は、そのサイト内のある情報についてツイートしただけなのだから、それをソーシャルメディア上でのアイデンティティ情報を紐付けてもよいと同意した、というように解釈するには、あまりに遠すぎる。Tweetボタンを押して投稿したユーザは、もちろん投稿した以上はタイムライン上から自分のTwitter投稿とそのアカウントが検索可能になること自体は想定するだろうが、それが今ブラウザを開いている自分自身が閲覧中のセッションとリンクされることについては、決して想定していないだろう。

この問題は、プライバシー保護に対するコンプライアンスの面からももちろんそうなのだが、ソーシャルメディアのエコシステムという面から特に考えるべきことではないかとおもう。もしもツイートからユーザを特定することが当たり前のものとして普及してしまうと、それによって自らの特定をされたくないユーザは、サイトに設置したソーシャルボタンのクリックをためらうことになるだろう。それは果たしてサイト運営者が望むものなのかどうなのか。あるいはTwitterというソーシャルメディアが望むものなのかどうなのか。


(追記)おそらくなのだけれども、FackebookのLikeボタンの場合も、そのようなユーザの追跡と紐付けが可能になる(?)かもしれない。Like Boxをクリックした際のイベントを取るためのJS APIが定義されている。

http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

ただし、FBのページに対してLikeしたユーザの一覧を取得するAPIがあるのかどうか、そしてそこにユーザがLikeを押した時刻の情報も含まれるのかどうかについては、ちょっと調べただけではよくわからなかった。ご存じの方がいたら教えてほしい。