巷の自動ログイン機能がどうなっているのか調べようと思い、
twitterの自動ログイン機能を操作し、HTTP headerを観察してみました。
どうやらクッキーの_twitter_sessという部分に602文字のランダムな文字列を保存して
自動ログインを行なっているようでした。
(クッキーのこの値を適当な文字列に書き換えると自動ログインできないが、自動ログイン成功時に保存された_twitter_sessの値に戻してやると自動ログインできたため)
またクッキーは自動ログイン成功時のままプロクシを経由しIPを変更した上でアクセスしてみたところ、普通にログイン状態が保持されていました。
twitterでは_twitter_sessのみで自動ログインの可否を判断しているんでしょうか?
セキュア属性もついていなかったため、平文でこの_twitter_sessが流れてしまっていると思ったのですが、セキュリティ的にどうなのかなと思いまして・・・
回答はtwitterに限らずyahoo、googleなど大手サイトの自動ログインの実装方法でもかまいません。
勘違い等あるかもしれませんが、ご存知の方がおられましたら回答をお願いします。
(ある程度裏付けのある回答をお願いします)
twitterでは_twitter_sessのみで自動ログインの可否を判断しているんでしょうか?
_twitter_sessとauth_tokenの値で「自動ログインの可否」を判断しています。
_twitter_sessのようなCookie値をセッションIDと呼び、ログイン状態を保持したり、会員制サイトでページ間を移動する時によく用いられる技術です。
セキュア属性もついていなかったため、平文でこの_twitter_sessが流れてしまっていると思ったのですが、セキュリティ的にどうなのかなと思いまして・・・
セッションIDを盗み取ることをセッション乗っ取り(セッション・ハイジャック)と呼びます。
現実には、有線LANをスニッフィングされていたり、無線LANの暗号が突破されない限りは平文で流れていたとしても乗っ取られることは少ないものです。よほどの有名人のTwitterアカウントでない限り、盗んでも役に立たないでしょうから。
ちなみに、POP3と呼ばれる一般的なメール受信方式でも、ポスワードを平文でサーバに送っています。
ECのような金品絡みのサイトでは、仰るように、セキュア属性を付けたCookieでセッションIDを運用されています。
ただ、セキュア属性はhttps通信の時に発動しますので(http通信時にはCookieを送信しない)、サイト全体をhttpsにしなければなりません。これはサーバにも負荷がかかることなので、Twitterのような無料サービスのサイトではほとんど使われません。
大手サイトがどのような仕組みでやっているかではありませんが、次のサイトが分かりやすいかと思います。
http://blog.ohgaki.net/espcs_if_a_fa_ia_a_pa_e_oa_a_sa_da_ca_sa
これを踏まえて、Twitterの場合を想像すると、
・自動ログイン自体はセキュアな機能ではない
・_twitter_sessの値のみで判断している
・_twitter_sessの値が漏洩すれば、不正アクセスされる可能性がある
・ログインのたびに_twitter_sessを変更することで、過去に漏洩した_twitter_sessは無効になる
ということでしょう。
また、詳しくは書けませんがアクセス元も考慮するサイトも存在します。
この辺りは、セキュリティとユーザビリティのトレードオフではないでしょうか。
挙げたサイトでも書いていますが、セキュリティが大事なサイトでは自動ログインは実装すべきでないとなっていますし、銀行系のシステムでは自動ログイン機能ってないですよね?
何かの参考になれば。
せっかく回答していただいて申し訳ないのですが、裏づけのない回答はご遠慮ください。
また検索ででてくる関連サイトはチェックしています。(ご提示いただいたサイトも閲覧済みです)
twitterでは_twitter_sessのみで自動ログインの可否を判断しているんでしょうか?
_twitter_sessとauth_tokenの値で「自動ログインの可否」を判断しています。
_twitter_sessのようなCookie値をセッションIDと呼び、ログイン状態を保持したり、会員制サイトでページ間を移動する時によく用いられる技術です。
セキュア属性もついていなかったため、平文でこの_twitter_sessが流れてしまっていると思ったのですが、セキュリティ的にどうなのかなと思いまして・・・
セッションIDを盗み取ることをセッション乗っ取り(セッション・ハイジャック)と呼びます。
現実には、有線LANをスニッフィングされていたり、無線LANの暗号が突破されない限りは平文で流れていたとしても乗っ取られることは少ないものです。よほどの有名人のTwitterアカウントでない限り、盗んでも役に立たないでしょうから。
ちなみに、POP3と呼ばれる一般的なメール受信方式でも、ポスワードを平文でサーバに送っています。
ECのような金品絡みのサイトでは、仰るように、セキュア属性を付けたCookieでセッションIDを運用されています。
ただ、セキュア属性はhttps通信の時に発動しますので(http通信時にはCookieを送信しない)、サイト全体をhttpsにしなければなりません。これはサーバにも負荷がかかることなので、Twitterのような無料サービスのサイトではほとんど使われません。
回答ありがとうござます。
auth_token確かにありました。
見るからに認証にかかわっていそうな名前だったのですが、どのように使われてるのかイマイチわかりませんね・・
twitter_sess
これは、セッションIDのようなものだと思います。
このIDだけで接続してますが、IPなどのクライアント情報などもサーバー側に保存してあって
セッションIDだけでなく、クライアント情報と一致しないとだめです。
実装によっては、IPが変わるとクライアント情報が一致しないと判断するものもあります。
twitter_sessの値も定期的に変わるようになってるはずです。
実際調べてみないとわかりませんが、ログインしなおさなくても値が変わるタイミングがあるはずです。
セッションハイジャックができないようにはなってると思います。
>平文でこの_twitter_sessが流れてしまっていると思ったのですが、セキュリティ的にどうなのかなと思いまして・
そんなことを言い出すと、セッションを使ってるようなほとんどのシステムが駄目ですが・・。
SSLがかかってない限り、平文です。
Cookieでsecure属性をつけても、httpで通信してる限り平文です。
>クライアント情報と一致しないとだめです。
クライアント情報とは具体的にどんな情報でしょうか。
質問ではIPを代えてアクセスても、自動ログインができたと書かせて頂いていますが、
IPを変えると同時にUAも変更して試しましたがこれも自動ログインを通りました
以下↑に対する自己レスです
これはセッションハイジャックした状態ですね、すいません
回答ありがとうござます。
auth_token確かにありました。
見るからに認証にかかわっていそうな名前だったのですが、どのように使われてるのかイマイチわかりませんね・・