自動ログイン機能について


巷の自動ログイン機能がどうなっているのか調べようと思い、
twitterの自動ログイン機能を操作し、HTTP headerを観察してみました。

どうやらクッキーの_twitter_sessという部分に602文字のランダムな文字列を保存して
自動ログインを行なっているようでした。
(クッキーのこの値を適当な文字列に書き換えると自動ログインできないが、自動ログイン成功時に保存された_twitter_sessの値に戻してやると自動ログインできたため)

またクッキーは自動ログイン成功時のままプロクシを経由しIPを変更した上でアクセスしてみたところ、普通にログイン状態が保持されていました。

twitterでは_twitter_sessのみで自動ログインの可否を判断しているんでしょうか?
セキュア属性もついていなかったため、平文でこの_twitter_sessが流れてしまっていると思ったのですが、セキュリティ的にどうなのかなと思いまして・・・

回答はtwitterに限らずyahoo、googleなど大手サイトの自動ログインの実装方法でもかまいません。

勘違い等あるかもしれませんが、ご存知の方がおられましたら回答をお願いします。
(ある程度裏付けのある回答をお願いします)

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/12/24 21:08:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:asuka645 No.2

回答回数856ベストアンサー獲得回数97

ポイント40pt

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のような無料サービスのサイトではほとんど使われません。

id:jayz

回答ありがとうござます。

auth_token確かにありました。

見るからに認証にかかわっていそうな名前だったのですが、どのように使われてるのかイマイチわかりませんね・・

2010/12/24 20:24:30

その他の回答2件)

id:tdoi No.1

回答回数174ベストアンサー獲得回数75

大手サイトがどのような仕組みでやっているかではありませんが、次のサイトが分かりやすいかと思います。

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は無効になる

ということでしょう。

また、詳しくは書けませんがアクセス元も考慮するサイトも存在します。

この辺りは、セキュリティとユーザビリティのトレードオフではないでしょうか。

挙げたサイトでも書いていますが、セキュリティが大事なサイトでは自動ログインは実装すべきでないとなっていますし、銀行系のシステムでは自動ログイン機能ってないですよね?

何かの参考になれば。

id:jayz

せっかく回答していただいて申し訳ないのですが、裏づけのない回答はご遠慮ください。

また検索ででてくる関連サイトはチェックしています。(ご提示いただいたサイトも閲覧済みです)

2010/12/24 19:01:02
id:asuka645 No.2

回答回数856ベストアンサー獲得回数97ここでベストアンサー

ポイント40pt

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のような無料サービスのサイトではほとんど使われません。

id:jayz

回答ありがとうござます。

auth_token確かにありました。

見るからに認証にかかわっていそうな名前だったのですが、どのように使われてるのかイマイチわかりませんね・・

2010/12/24 20:24:30
id:tama213 No.3

回答回数486ベストアンサー獲得回数30

ポイント40pt

twitter_sess

これは、セッションIDのようなものだと思います。

このIDだけで接続してますが、IPなどのクライアント情報などもサーバー側に保存してあって

セッションIDだけでなく、クライアント情報と一致しないとだめです。

実装によっては、IPが変わるとクライアント情報が一致しないと判断するものもあります。

twitter_sessの値も定期的に変わるようになってるはずです。

実際調べてみないとわかりませんが、ログインしなおさなくても値が変わるタイミングがあるはずです。

セッションハイジャックができないようにはなってると思います。

>平文でこの_twitter_sessが流れてしまっていると思ったのですが、セキュリティ的にどうなのかなと思いまして・

そんなことを言い出すと、セッションを使ってるようなほとんどのシステムが駄目ですが・・。

SSLがかかってない限り、平文です。

Cookieでsecure属性をつけても、httpで通信してる限り平文です。

http://www.hepo.jp/bbn/?Cookie%A4%CESecure%C2%B0%C0%AD

id:jayz

>クライアント情報と一致しないとだめです。

クライアント情報とは具体的にどんな情報でしょうか。

質問ではIPを代えてアクセスても、自動ログインができたと書かせて頂いていますが、

IPを変えると同時にUAも変更して試しましたがこれも自動ログインを通りました

以下↑に対する自己レスです

これはセッションハイジャックした状態ですね、すいません

2010/12/24 20:34:33
  • id:tdoi
    実際に開発をしたサイトの内容なのですが、それを裏づけがないと判断されるのであれば、不適切ですね。
    すいません。
  • id:jayz
    tdoiさんへ

    twitterや他の大手サイトの自動ログインの実装方法が知りたかったので
    不適切とさせて頂きましたが、気分を害してしまったらごめんなさい。
  • id:tama213
    >これはセッションハイジャックした状態ですね、すいません

    IPを変えると同時にUAを代えてますけど、
    同一のブラウザとマシンからアクセスしてるんでしたら
    セッションハイジャックとはいえないと思います。

    クッキーだけの値をコピーしてログインが可能でしたら
    実際に、別のブラウザーとかでクッキーを書き込んで
    容易にログインが可能なのなら、セッションハイジャック可能だといえるでしょう。

    ただ、IPとUAをかえただけでしたら、twitter_sessの値だけでログインできてる
    ことの証明にもなりませんし、セッションハイジャックもしたことにはなりません。
  • id:jayz
    tama213さんへ

    あぁ、そうでした。
    一度クッキーを完全に消した上で、ログイン成功時の_twitter_sessに変更しました。
    というか、
    「そんなことを言い出すと、セッションを使ってるようなほとんどのシステムが駄目ですが・・。」
    「これはセッションハイジャックとは言えない」
    とか、定義がどうこうっていうことを聞きたくて質問しているわけではないので
    その辺汲んでいただけると助かります。
  • id:asuka645
    >auth_token確かにありました。
    >見るからに認証にかかわっていそうな名前だったのですが、どのように使われてるのかイマイチわかりませんね・・

    auth_tokenはOAuth認証で使われるトークンで、計算方法が面倒なのですが、最近はてなで扱いを始めたということで、技術情報については http://developer.hatena.ne.jp/ja/documents/auth/apis/oauth をご覧下さい。

    セッション・ハイジャックの件で蛇足ですが、http通信でproxyを通していると、セッションIDばかりでなく、IDやパスワードまでが盗み取られてしまう可能性があります。くれぐれも正体不明のproxyはご利用にならないように。
  • id:jayz
    asuka645さんへ

    参考URLありがとうございます。
    これからじっくり拝見させて頂きます。

    またセッションハイジャックに関する補足ありがとうございます。
    http通信で管理者のよくわからないプロクシを通す=平文のIDパスがそのままプロクシを経由していくからということでしょうか。
    例えhttps通信で暗号化されていてもそのようなプロクシを経由するのはよろしくなさそうですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません