ASP.net MVC セッションハイジャック対応

このQ&Aのポイント
  • ASP.NET MVC 2.0で運用保守しているモバイル会員向けのサイトにおいて、セッションIDの表示方法がセキュリティ上の問題となったため、セッションIDの変更方法を探しています。
  • 従来のWeb.Configでは、セッションIDがURLに表示されるように設定されていましたが、セキュリティ上の問題が指摘されたため、セッションIDの変更を実施しました。
  • 現在、スマートフォンやPCからのアクセスではセッションIDがURLに表示されず、ログイン前後でセッションIDが変わることが確認できます。しかし、クッキー非対応の携帯ではセッションIDが変更されない問題が発生しています。クッキー非対応の端末でもセッションIDを変更する方法についてご教示いただけないでしょうか?
回答を見る
  • ベストアンサー

ASP.net MVC セッションハイジャック対応

どうにも困ってしまい初めて質問させていただきます。 現在、ASP.NET MVC 2.0で運用保守しているモバイル会員向けのサイトがあります。 従来のWeb.Configは <sessionState mode="InProc" timeout="30" regenerateExpiredSessionId="true" cookieless="true"/> のようにしており、URLにセッションIDが表示されるように設定されていました。 これがセキュリティ上問題ということで、ログインの前後でセッションIDを変更することになり、 ログイン処理時に Session.Abandon(); を実行して、セッションを破棄して、ログイン後のページでセッションIDが変更するようにしており これはうまく想定通りにいっていました。 その後、最近スマフォのアクセスの方が増えてきたこともあり、極力URLにセッションIDは表示したくないということでWeb.Configを以下のように変更しました。 <sessionState mode="InProc" timeout="30" regenerateExpiredSessionId="true" cookieless="AutoDetect"/> スマフォやPCからのアクセスでは想定通りURLにセッションIDが表示されることもなく、 ログイン前後でセッションIDが変わりました。 しかし、クッキー非対応の携帯で確認すると、URLに表示されるセッションIDが ログイン前後で変更されなくなってしまいました。 iモードシュミレータを使いデバッグ実行で直接セッションIDを確認しても、 やはり変わっていませんでした。 AutoDetectでクッキー非対応の端末でセッションIDを変更する方法はあるのでしょうか? いろいろ調べたのですが直接関係するような内容は見つけることができず、 質問させてもらいました。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • onos
  • ベストアンサー率81% (127/155)
回答No.1

AutoDetectの説明としてこんなのがありますね。 http://www.atmarkit.co.jp/fdotnet/aspnetmobile/aspnetmobile04/aspnetmobile04_02.html で、ここで「ブラウザをデバイス・プロファイルで識別した結果による。」というのがくせもの。 デバイス・プロファイルってなんだ?という話になってきます。 で、その実体は、と。。。 http://www.atmarkit.co.jp/fdotnet/aspnetmobile/aspnetmobile02/aspnetmobile02_03.html このあたりかな? ブラウザ定義ファイルというのがありまして、、、と で、この定義ファイル、、、当初は便利だったんですが、その後とくに日本の携帯に対応した形でのメンテナンスがされてない、はず。 この定義ファイルにうまくひっかからないと想定していない動きになってもおかしくないです。 まあ、もしかすると本当の原因はここじゃないのかもしれませんが、このあたりをきちんとおいかけないとASP.NETが各種の端末にたいしてどう動いているかは判断できません。 携帯というかフィーチャーフォン、ですか。 それ向けにはもとのとおりcookieless="true"としたページを提供して、PC/スマホ向けには別のページを提供する、というのが現実的な解なのではないかと考えています。

ariano343
質問者

お礼

ご回答ありがとうございました。 ブラウザ定義ファイルというのは大変参考になりましたが、 本件とは関係がなさそうです。 やはりガラケーとスマフォ向けは分けるしかなさそうですね。 その方向で検討したいと思います。

関連するQ&A

  • セッションハイジャック(セッション固定化)の対策は必要?

    ・php.ini で session.use_only_cookies = 1 ・フレームワークで XSS 対策(自動エスケープ) を行っている場合、セッションハイジャック(セッション固定化)の 可能性は、ないと考えてよろしいでしょうか? というのも、session_regenerate_id() は、セッションハイジャックの 可能性を、かなり減らせると思うのですが、これを利用すると、 レスポンスが来る前に、ユーザが送信ボタンを再度クリックしたり リロードした場合に、セッションが切れてしまうことが よくあるからです。 そのため、1/5の確立で session_regenerate_id() を起動、 if (mt_rand(1, 5) === 1) {   session_regenerate_id(TRUE); } としてみたのですが、抜本的な対策とは思えません・・・。 XSS対策が完璧で、セッションはクッキーのみの場合、 他にどのような対策が必要でしょうか?ご教示ください。

    • ベストアンサー
    • PHP
  • sessionについて

    こんばんは。お世話になっております。 題名にあるようにセッションに関してアドバイスいただきたく投函させて頂きます。 (他に似たような質問はあったものの、上手く解釈できなくて・・) 現在、DBに登録された会員のみがログイン出来る機能を有したサイトを作成しておりますが、DB参照の後、idなどを、セッション変数に代入し、そのデータを持ち歩いています。 書籍や他の方からセッションIDのことを耳にしますが、いまいち、その必要性というものを理解する事が出来ないのですが、このセッションIDは、どこでどういったところで必要になってくるものなのでしょうか? また、チェックボックスなどで任意により、自動でログインする機能を持たせるとした場合、クッキーを用いるという事までは理解したのですが、調べた範囲では、先のセッションIDをクッキーに保存させる・・という内容を多くみました。 現在、セッションハイジャックを避けるようサーバー側に保存されるセッションIDを書き換える設定をしているのですが、このような場合はクッキーを用いての自動ログインはどうしたらいいのだろう?と糸口が見えずにいる次第です。 以下、アドバイスを頂戴したいことをまとめると、 1.ログイン状態を認識させるためには、セッション変数だけで事足りるのか?また、この場合においてのセッションIDの意味するとは? 2.セッションハイジャックを避けるためサーバー側に保存させるセッションIDを随時変更している場合、自動ログイン機能を用いるには、どのような流れ(内容)になるのか? です。お忙しい中恐縮ですが、アドバイスなど頂けたら幸いに思います。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • セッションクッキーの有効期限について

    VC2010でWebアプリケーションを作成しております。 セッションクッキーを使用しているのですが、Webブラウザを閉じた時には、きちんと消えてくれますが、一定時間(20分)が経過したときは、消えてくれません。 数時間経っても、消えませんでした。 ちなみに、セッションクッキーではなく、セッション情報は、一定時間(20分)が経過した後、消えています。 下記、URLでは、一定時間が経過したときに消去されるようなことが書いてあります。 セッションCookie http://www.asp-user.jp/help/session_cookie/ timeoutに関しては、web.configで<sessionState timeout="20" />のように設定しております。 一定時間が経過したとき(timeout)の設定方法は、これ以外に何が必要でしょうか? WEBサーバ、もしくは、セッションステートサーバ側の設定(IIS)が必要でしょうか? IISのバージョンは、7.5です。 サーバの構成は、下記のようになっております。 ・WEBサーバ ・DBサーバ ・セッションステートサーバ(DBサーバと同じサーバ)

  • WEBのクッキーとセッションは、クライアント側で変更できるのでしょうか?

    クッキーとセッションについて教えてください。 (例として使用している言語はphpです。) オートログイン機能用に、IDとパスワードの情報をクライアント側のクッキーに保存してもらい、 指定のサイトをブラウザで開いたらクッキーから情報を読み込み、 該当したらログイン用のセッションにサイトに入れるフラグを入れるとします(たとえば$_SESSION["login"]="on")。 この場合、セッションの[login]の値が"on"なら、ログインできるのですが、 ブラウザ自体の機能やUNIXのプログラム等にセッションの値自体を変更する何かしらの方法があり、 IDとパスワードをしらなくてもセッションの[login]を"on"にしてログインされてしまうということはあるのでしょうか? また、今回の処理でクッキーを読み込む際、変数に一度格納している(例:$id=$_COOKIE["id"])のですが、 この場合でも、別ドメインのサイトに行った際IDやパスワードがログとして表示されてしまうのでしょうか? (セッションは別ドメインのサイトにリンクした際、飛び先のドメインでも並文としてログが表示されてしまうらしいので) 教えていただけるようお願いします。

  • PHPセッションIDの変更

    お世話になります。 phpでのセッションIDの変更の処理(セッションの中身も初期化する)がうまくいかず困っております。 以下のようなコードでセッションの管理をしているのですが。。 現象としては、最初に発行したセッションIDを保持したクッキーが削除されていない。 下記のコードの中の2度目にsession_start()を実行している 部分の後のセッションIDを見ると 新しいIDになっているがブラウザのクッキーのセッションIDは 古いIDのまま。 という現状です。 どなたか、原因が判る方、ご教示頂ければ幸いです。 宜しくお願いします。 ------------------------------ session_start(); //セッションクッキーを破棄・ if (isset($_COOKIE[session_name()])) {   setcookie(session_name(), '',time()-42000, '/'); } //セッションを完全に破棄・ if('' != ($myid = session_id())){   $_SESSION = array(); //セッション変数を初期化・   session_destroy(); } session_id(md5(uniqid(rand(), true))); //新しいセッションID session_start(); $_SESSION['userid'] = 'hoge'; -------------------------------------------------

    • 締切済み
    • PHP
  • 301リダイレクトはセッション引き継ぐか?

    301リダイレクトはセッション引き継ぐか? クッキー使用不可な端末からのアクセス時、 現在はURL末尾にセッションIDを付加しているのですが、同一ページを表示するのに 異なるURLとなってしまう為、SEO目的で301リダイレクトを用いてURLを統一しようと検討中です。 (http://hoge.com?SID=xxxx ⇒(301リダイレクト)⇒http://hoge.com) そこで質問なのですが、この場合リダイレクト後ページでは (1)URLからはセッションIDが消える? (2)リダイレクト後ページでセッションは有効? でしょうか? 有識者の方おられましたらご教授の程よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セッション脆弱性を克服するには?

    またお世話になります。 いつも的確な回答を頂いて助かっていますm( __ __ )m 【仕様】 ・ ログイン認証ページのみ SSL で、それ以外のページは 【非SSL】 です。 ・ ログイン認証時にセッションIDをクライアントのクッキーに保存し、サーバー側では MySQL にセッションIDとログイン情報を保持します。 ・ 認証以降のページでは、クライアントから送信されてくるクッキーセッションIDを元に MySQL のデータと照合し、ユーザーのログイン状態を維持します。 ・ 言語は PHP を使っています。 よくあるセッション管理サイトだと思います。 そして、セッションIDさえ盗まれなければセキュリティとして問題無いと考えています。逆に言うとセッションIDが盗まれると極端に弱いと思います。 【私の考える脆弱性】 ・ ログインページ以外が 非SSL ということから、セッションIDの盗聴が可能かと思います。 ・ 普通に使用していても悪意あるサーバーを経由したらトレースされて簡単にセッションIDが抜かれると思います。 ・ ログインした状態のユーザーが怪しいリンクをクリックしてクロスサイト攻撃でクッキーを抜かれる可能性もあります。 質問は、なぜ、こういった多くの問題が予測できるのに この「教えて!Goo」の認証もログインページはSSLですが、それ以外は非SSLです。といった具合に多くのサイトがこのような認証方式を取っているのか? もう一つ質問は、私は先に上げたような脆弱性を防ぐ方法がわからないのですが、何か画期的な方法でセッションハイジャックなどを防御しているのでしょうか? もしくはセッションIDが盗まれてもそのセッションIDでのアクセスを無毒化するような方法があるのでしょうか? 以上です。 よろしくお願いします。

  • セッション

    セッションとクッキーで質問です。 1.session_id()やsession_name()っていつ使うのでしょうか? ブラウザは特定できても個人を特定できるわけではないですよね?それとも ブラウザを特定して管理するためなのでしょうか? 2.自動グイン機能を実装しようと思うとき、 クッキーとサーバー側(正確にはdb)にランダムな文字列を格納し、次回サイトを訪れた際、保存している値とクッキーにある値を照合し合えばログインしたことにする。 上記のようなロジックで大丈夫でしょうか?

    • ベストアンサー
    • PHP
  • 「セッション管理用のクッキーに secure 属性をつける」についてで

    「セッション管理用のクッキーに secure 属性をつける」についてですが、 具体的には、 <?php session_start(); session_regenerate_id(TRUE); ?> とあった時に、どのようにコードを加えれば良いのでしょうか? ご教授、よろしくお願いします。

    • ベストアンサー
    • PHP
  • sessionとcookieの設定内容の区別

    セッションとクッキーの使い分け方法を教えていただけないでしょうか? 簡単に言えばセッションがサーバサイド、クッキーがクライアントサイド、 セッション内容はブラウザ切れば消える(残すことも出来る)、クッキーはブラウザに残る、 と言うことは分かっているのですが、実装の仕方が分かりません。 例えばログインフォームでは$_SESSION['name']、$_SESSION['password']を回す・・・というのは分かります。 認証が終われば$_SESSION['name']、$_SESSION['password']は破棄して$_SESSION['login']=TRUE等を使うのではないかと思っております。 (そうではなくて、認証後は全て$_COOKIEで処理するのでしょうか?) で、$_COOKIEにはsessionIDが入っていると。 しかしながら、ブラウザ切っても暫くしてまたサイトを訪れたときにログイン状態が続くようにするにはどのようにすればいいのでしょうか? $_COOKIEにその情報を格納するのだと思うのですが、例えば$_COOKIE内にユーザidやlogin=OKのような文字を入れているとブラウザから見えてしまいます。 勿論ハッシュ化をして簡単には把握できないでしょうが、ここにはどんな情報が格納されているのか見当も付きません。 具体的な$_SESSION、$_COOKIEに入れるものと、サイトでの各々の実装法を教えていただけないでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう