安全性の高いセッション管理方式 のServletへの導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩 1 研究目標 Servlet・JSPの安全なセッション管理 セッション管理 Webサーバーが複数のページ間でクライアントの情報を維持 するための仕組み 例・・・電子商取引における取引に関する情報など Servlet・JSPにおけるセッション管理法 IDによる自動的な管理 手動によってFormやcookieなどに直接セッション情報を 格納 2 IDによるセッション管理 クライアント毎に異なるIDを配布 ServerはIDを元にデータを管理 ID=1 clientA アクセス clientB ID=2 Data ID確認 インターネット Web server (tomcat) データ取得 tomcat:サーブレットエンジン チェック ID=1 Account Password Data・・・ ID=2 Account Password Data・・・ 3 従来のセッションID管理と問題点 HTTPコネクション毎にIDを自動的に管理(Sessionクラス) IDをcookieに格納 クライアント側でIDを管理 問題点 第三者に漏洩 → IDから個人情報取得・悪用 (クロスサイトスクリプティング) IDをリクエストURLに格納 例:http://csg.is.titech.ac.jp/index.html;jsessionid=***** 問題点 リクエストURLはリンク先のサーバに残る可能性がある (Referer機能により) 4 手動のセッション管理 Formの利用 <A>タグ・・・入力パラメータ無しのページ移動の手段 <Form>タグ・・・入力パラメータ付きのページ移動の手段 hiddenパラメータへクライアント情報を入れる • hiddenパラメータ ・・・Formのブラウザ上に表示されないINPUTフィールド ・・・比較的安全だとされている 使用上の問題点 • ページ移動時には、<A>タグは使えず<Form>タグを使用しなくてはな らない • ブラウザの「戻る」機能が正常に機能しなくなる • セッション管理に用いる場合、全てのページでServlet・JSP コードを書き変えが大変である 5 本研究の提案 簡単で安全なセッション管理 IDの自動管理方式に選択肢を追加 • IDの管理方式にhiddenパラメータを追加 • 管理方式は三方式から選択可能 (cookie・リクエストURL・hidden方式) cookieをセキュアに拡張 • cookie使用時に自動的に認証を行うメソッドの追加 • Sessionクラス不使用時のセキュリティを向上 6 hiddenパラメータ方式の追加 IDの自動管理方式にhiddenパラメータを使用可能に ページの書き換えが大変である! <A>タグを<Form>タグに変更 hiddenパラメータ自体の書き込み 自動で送信htmlファイルのコード変換 解決策 •FormのINPUT文の追加 •JavaScriptの挿入 → 手書きをしなくて済む → <A>タグの使用が可能 7 実際のコード変換 最終的な送信htmlファイルの内容を全てチェックし、 <Form>タグ • 同<Form>タグ内に <Input type=“hidden” name=“sessionid” value=“******”> の一行を追加する <A>タグ • 新たにFormのページを作成するJavaScriptと、それ を送信するJavaScriptを書き加える • リンクをクリックすると上記のJavaScriptが起動するよ うに<A>タグを変更 8 起動するJavaScriptコード <SCRIPT LANGUAGE="JavaScript"> Formページ作成用Script function formwindow(href) { document.write( "<FORM NAME=\"NINNSHOU\"METHOD=\"POST\“ACTION=\""+href+"\">“); document.write( “<INPUT TYPE=\"HIDDEN\" NAME=\"jsessionid\" VALUE=\”******”> </FORM>”); hiddenパラメータ document.write( “<“+”SCRIPT> document.NINNSHOU.submit() </SCRIPT"+">"); } </SCRIPT> Form送信用Script 9 cookie用の新メソッド Sessionクラスを用いない場合のセッション管理 cookie使用時に自動的に認証を行う cookieに格納された情報を取得する時に認証を行う 新メソッドを追加 • 旧メソッド:getValue() 新メソッド:secureGetValue() • cookie情報が盗まれても、認証をクリアさせなければセッ ションジャックを防げる 10 hiddenパラメータへの 変換の影響を調べる 送信htmlファイルの大 きさを変えてサーバの スループットを計測 考察 html内のコード変換が 最も大きなボトルネック となっている throughput of server [Mbit/sec] Webstoneベンチマークによる実験 16 14 12 10 Tomcat改-変換なし Tomcat Tomcat改-変換有り 8 6 4 2 0 0 2000 4000 6000 8000 size of Servlet file [byte] 10000 11 まとめ Tomcatへの追加機能の提案と実装 安全とされるhiddenパラメータ方式を セッションIDの管理方式に追加 • 送信htmlのコード変換することで自動化と<A>タグの使用 を実現 ・・・見栄えの悪さを解消 cookie使用時に自動的に認証を要求するメソッド 今後の課題 htmlファイルのコード変換がパフォーマンス上の ボトルネックになっているので、ここを改善する 12
© Copyright 2025 ExpyDoc