情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

Gunosy経由で記事を読むとTwitterアカウントやFacebookアカウントが推測可能な情報がサイト側に提供される仕組みについて

Gunosy (6)

アクセス解析で、どこのURLから来たかの情報を一覧にしてみたところ、GunosyのURLの中にユーザ名(非公開の人含む)らしきものが含まれている場合がかなりあり、誰がどの記事を読んだのかが推定できてしまうのではないかということに気が付きました。今回は、それを発端に調べて分かったことを紹介します。ポイントは、非公開でもアカウント名を含むURLがリファラ(参照元URL)に含まれる、ということと、そのURLに含まれるユーザー名が、Twitterアカウント名やFacebookのURLを参考にして自動設定されるらしい、ということです。

一般的にこのようなサイトがどのような仕組みになっているべきで、このことを問題とまで言って良いものなのか断言できないのですが、Twitterアカウント名やFacebookアカウント名が、アクセス先のサイト管理者に把握されてしまうことが気になる人は少なくないだろうと思ったので、紹介します

Gunosyが公開設定の人は、Gunosyが推薦した記事のどれをクリックしたのかが通知されてしまうだけ、といえばそうなのですが、Gunnosyを非公開設定で使っている人の場合は、非公開にしているはずの、どんな記事が推薦されているのか、という情報の一部が、ごくわずかな相手ではあるものの確かに漏れることになるので、場合によっては利用者の想定と異なり、問題の原因になるかも知れません。

自分の場合はTwitterアカウント名が通知されてしまうようなのですが、ちょっと嫌かも知れません。。。

※後述のように、Gunosy経由全てが、というわけではありません。Twitterなどで使われている短縮URL http://gunosy.com/g/****/ 経由ではなく、Gunosyが推薦した個人の記事一覧ページ経由が対象です。また、PCのウェブブラウザからのアクセスを対象にしており、iPhoneアプリやAndroidアプリはお話の対象外です(実際対象となるアクセスのログを見ると、"iPhone"は見当たりませんでした)

access-log-gunosy-user-names

↑サーバーのアクセスログから、Gunosyのユーザー名を取り出すテスト結果の様子(ユーザー名の部分は黒く塗りつぶしてあってわかりにくいですが)。ユーザー名がずらっと並び、本名らしきフルネームが気になります。

※修正についての追記あり

アクセス解析画面

リアルタイム アクセス解析(Google Analytics)を見ていると、参照元URLを表示する画面が次のようになっていました。

google-analytics-gunosy-referrer

これは、gunosy.comの「どのページ」から人が来ているかが表示されています

そして、黒く塗りつぶしている部分に、Gunosyの「アカウント名」と思われる文字列が入っています

「ユーザー名を含んだURL」から来たことが分かる

このアカウント名を含むURLは、ユーザー毎に推薦される記事の一覧ページです。「http://gunosy.com/ユーザ名/月/日/数字」のような形式のURLを持つページです。

つまり、リファラにこの情報があることから、ユーザ個人の記事ページから"誰か"が来たということが分かります。

実はこの時点で、かなり高い割合で、誰か=そのユーザーであると推定され、そのユーザーが読みに来たということが推定できます(後述のアクセス分析の結果)。

この「URL」は最新以外の記事一覧ページのURL

詳しくは後述しますが、このURLは、Gunosyの売りである、「個人に最適化された、推薦記事の一覧ページ」ごとに発行されるURLのようです。

Gunosyのアカウント名はTwitterアカウント名やFacebookアカウント名の模様

さて、Gunosyのアカウント名が本名だったり、Twitterアカウントと同じだったりすると、同姓同名やアカウント名かぶりの可能性はあるにしろ、読みに来た個人を特定できる可能性がある情報が提供されることになりそうです(実際に漢字でフルネームの人もいました)。

実は、これも詳細を後述しますが、このアカウント名はTwitterアカウント名やFacebookアカウント名から、自動設定されているようです。ですからFacebookの個人URLでよく見かける「firstname.familyname」の形式の人がログに多かったのだと思います。というわけで、「ユーザ名=Twitterアカウント名」だったり「ユーザー名=Facebookアカウント名」だったりだと思って読んでみてください。gunosyを使っている人は、自分のユーザ名として何が使われているかを、過去の一覧ページを表示して確認してみてください。

プライベートアカウントだとほぼ確実

ただ、このユーザ毎の記事一覧ページは公開されているようで、URLを知っている人ならば、他の人でもリンクをクリックできます

しかし、Google Analyticsの機能に、このリダイレクト元ページに飛べる機能があり、最初何のページだか分からずに飛んでみたのですが、ジャンプしてみると「PRIVATE 申し訳ありませんが、この記事は非公開設定になっているため、閲覧することができません。」というページが表示されました

これが何を意味しているのかと言うと、その非公開設定のユーザ個人記事ページ経由で該当記事に飛んできた人は、そのユーザーページの持ち主本人である可能性が極めて高いと推定できるということです。

また、Gunosy上で非公開設定をしている人であっても、どのGunosyアカウントの持ち主がアクセスしてきたか、ということがアクセスしたサイト側に通知されてしまうということも分かります。

どんな記事を読んでいるのかバレたくないから非公開に設定した人もいると思うので、その人は余計に注意する必要がありそうです(デフォルトでは公開でした)。

この点ははてブも同じ(非公開ブックマークについて試してみた)なのですが、送信される参照元URLに含まれているのはあくまで「はてなID」であって、連携したTwitterや本名登録のFacebookとは関係ないというところが違うところかと思います。また、Gunosy.comは、本人以外が経由してくることはとても少ないようで、アクセスをとても特定しやすく、そのあたりも性質が違うと思います。ただし、(ブックマークが)非公開でもリファラを送るという点では同じなので、この仕組み自体は問題ではないのかもしれません。

Redirectで回避されている?

しかし、普通なら、そのようなユーザー名を含むURLがリファラ(※)として通知されてしまわないように、ワンクッション置いてから転送されるのかなー、と思っていたのですが、そうではないようでした(※Webサイトにアクセスする際に参照元URLを設定しておく部分のこと)

実際にGunosyのユーザ個人記事ページから記事にジャンプして、Chromeの機能で「Request Headers」を確認してみると、「Referer」の部分に、その個人の記事ページのURLが記述されていました。

そして、個人ページから、このブログのページにジャンプして、サーバー側のログをチェックしてみても、確かにそのGunosyの個人ページのURLがリファラとして通知されていました。

一応、たしかにGunosyのユーザ個人ページのリンク自体は「http://gunosy.com/redirect?...」というURLで指定されており、その転送ページ経由で転送されるようにはなっているのですが、リファラの情報は削除されておらず、リファラを維持したまま転送されているようです。このリダイレクトは、単にユーザーの好みを分析するためだけに使われているのかも知れません

メモ:Advanced Rest Client Chrome Plugin で確認してみると

RESTClient 3.2.1(WizTools.org)でうまく行かなかったので、ChromeプラグインのAdvanced Rest Clientで、リダイレクトページにアクセスした時にどんなヘッダを返しているのかを見てみたところ、「Status 302 Found」でした。301や302を用いたリダイレクトでは、リファラは引き継がれるそうです。

Webサーバーのログをチェックしてみる

実際にこのユーザ名情報がサーバのログとしてどの程度記録されているのかをチェックしてみることにしました。雰囲気を感じてもらえればと思います。

荒っぽい確認方法ですが、コマンド「cat /var/log/nginx/access_log | grep -o -p 'http://gunosy.com/.*?/' | sort | uniq -c」(※このgrepの正規表現では、微妙にユーザ個人記事ページ以外のものが数URL混ざります)などを実行した結果、とりあえずおよそ380アカウント分程度のGunosyのユーザ名が記録されていることが分かりました。コマンドでの出力結果には、http://gunosy.com/○○ が一覧になっており、○○の部分にアカウント名が記録されています。また、このログ(一般的なWebサーバーが通常保存しているログ)には、その人が何時何分何秒に、どのページにアクセスしたかなどが記録されています。これらが1行にまとめて書かれているので、どのアカウントの人がどの記事を、いつ読んだかが分かる、という具合です。

また、各ユーザーのページから、どれくらいのアクセスが来ているのかを確認してみたところ、ほとんどが「1」でした。つまり、その個人の記事ページから1人しか来ていない、ということです。このことから、個人の記事ページからアクセスがあった場合、それがそのユーザー本人である可能性がかなり高いのではないかと推測できます。

そもそも、このURL「gunosy.com/ユーザ名/月/日/数字」はいつ使われるんだ?

※ここから、「後述」と後回しにしていた部分です

ただ、このログから分かったのは、なんだか少ない、ということでした。そこで、Gunosyに登録してみたのですが、通常個人のページはgunosy.comというトップページであり、ユーザ名は含みませんでした(だからhttp://gunosy.com/からのアクセスが多いのですね)。

すると、gunosy.com/ユーザ名/...の記事一覧ページはいつ使われるのでしょうか。

ここでわかったのが、「別の日付」や「朝刊・夕刊」をクリックして、別の記事一覧を表示しようとクリックした時、「http://gunosy.com/ユーザ名/月/日/数字」というURLになる、ということでした。つまり、最新のページだけトップページとしてアクセスでき、別の日付などのページは全てユーザ名を含む形式で提供されているということでした。

そもそも、ユーザ名なんて設定した覚えがない→TwitterアカウントやFacebookアカウントを利用している模様

ここで、さらに気が付いたのですが、「gunosy.com/ココ/...」で使われているユーザー名を登録した覚えがありません。

実は、というか見ればほぼ明らかなのですが、この「ユーザー名」はTwitterアカウントの@以降でした。それは、私がgunosyアカウントをTwitterアカウントと関連づけて作成したからなのだと思います。

そしてさらにこのことから、facebookアカウントで関連づけて作成した人はどうなるのだろう、と考えてしまうのですが、ログに「firstname.familyname」のような形式の人が目立つことから、おそらくFacebookアカウントで認証してアカウントを作成した人のユーザー名は、Facebookアカウントの情報(URL?)を参考にしてつけられるものなのだと思われます。

まとめ:これが嫌な人は注意した方が良い?

これらの情報がサーバー側に渡されて困る人はそこまで多くないのではないかと思うのですが、見るページや立場によっては問題になるのかも知れません。また、気持ちの問題も大きいと思います(「なんか嫌」とか)。こういうことに敏感なgunosyユーザーの方は、自分の「ユーザー名」や、普段Gunosy経由でどんなページを読んでいるか、それがバレても問題ないか、チェックしてみると良いかも知れません。

この仕組みが良いか悪いか、変更された方が良いのかそのままでいいのかは置いておくことにして(大切だけど)、とりあえず「○○だと思って使っていたら、△△だった」なんてことがないように、現在の仕組みを理解して使ってもらえたらなぁ、と思います。

本文中に書いたようにまだGunosyを使い始めたばかりなので、しばらく使って好みが反映されるかどうかを体験してみたいと思います。

追記:悪用の可能性を考えてみる

アクセスした個人個人からしたら、普通大した問題にならないだろう思いつつ書いてみたのですが、アクセスされたWebサイト側から考えてみれば、悪用して利益を上げる方法もありそうだと思って、ありそうな悪用例を考えてみました。

今回の場合、アクセスログから興味情報(どの記事を読んだか)を特定した読者のTwitterアカウントやFacebookアカウント(実名)が推定できるので、このアクセスログをスパム送信先リストとして編集し、読まれた記事の内容に最適化したスパムメッセージを送信して利益につなげることが可能だと思います。

例えば、かなり極端な例ですが、恋愛テクニック的な記事を読んでいる人に、Twitterのサクラアカウントからメッセージを送信し、出会い系サイトの紹介ページへ誘導する、というサクラサイト商法への悪用なんかが考えられそうです(最近サクラサイト商法やらスパムメッセージの記事を書いているので、こういう発想に…)。

追記:修正されたようです

2013-11-12 12:55 Gunosyの中の人から連絡があり、「/redirect経由のrefererの問題」について修正した、とのことです。これにより、アカウント名を含むrefererが/redirect?=...経由で送られることはなくなったそうです。

コメント(0)

新しいコメントを投稿