安全性の高いセッション管理方式 のServletへの導入

安全性の高いセッション管理方式
の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