1月17日(月)3、4コマ目
今日、やったこと
- 入力チェック(HTML)
- エラーページ
- 入力内容の無害化(サニタイジング)
- セッションオブジェクトについて
- Cookieとセッション
今日のホワイトボード
入力チェック(HTML)
HTML5には以下の入力チェック機能が追加されている。
- type属性に応じた入力値の制約
- required属性で入力必須制約
- pattern属性で入力値のパターンによる制約
- min属性、max属性で入力値の範囲の制約
- maxlength属性で入力値の長さを制約
詳細は各自調べてください。
エラーページ
いままでは実行時例外に対する処理をしていなかったため、エラー発生時にはスタックトレース画面が出力されていた。これはセキュリティ的に問題あり(サーバーのバージョンのようなサーバー環境がわかってしまう)のため、実行時例外発生時にはエラーページを表示するようにしたい。
設定ファイルweb.xmlでエラー毎のエラーページの設定ができる。
| 図 エラーページ |
入力内容の無害化(サニタイジング)
ユーザーの入力内容をそのまま出力すると問題が発生するケースがある。
例えば、HTMLのタグが入力された場合、そのまま出力するとWebブラウザはタグとして表示してしまう。
これを防ぐため、入力内容を取得するときや出力するときに無害化(サニタイジング)を行う必要がある。
無害化(サニタイジング)は結構めんどくさいので、ライブラリを使ってください。
授業では「Apache common text」のStringEscapteUtilsクラスを利用しました。
「Apache common lang」にも同名のクラスがあるが、こちらは現在非推奨扱い。
| 図 無害化(サニタイジング) |
作成中のアプリケーションを下図のように改造。
認証成功時はユーザー情報ページを表示する。
| 図 改造 |
セッションオブジェクト
サーバーのセッションオブジェクトはクライアント毎に個別に用意される。
各セッションオブジェクトにはセッションIDが付与されている。クライアントにもセッションIDが付与され、リクエストごとにサーバーに送信することで、サーバーはクライアントとセッションオブジェクトを紐づけている。
サーバーとクライアント間でのセッションIDのやり取りの際、盗聴されるとセッションIDが漏洩してしまい、最悪セッションハイジャックが発生する。
| 図 セッションとセッションID |
セッションIDとCookie
Cookieとはクライアント(Webブラウザ)が情報を保存する仕組み。
クライアントはサーバーからセッションIDを受け取るとCookieに保存する。
| 図 CookieとセッションID |
もしCookieのHttpOnly属性がFalseになっていると、JavaScriptから読み込み可能になり、クロスサイトスクリプティングでセッションIDを盗み出すことができる。
デフォルトではHttpOnly属性はTrueになっており、HTTPでのやりとりのときしかCookieを読み込むことができない。
セッションID漏洩対策
通信時の盗聴による漏洩には暗号化、総当たり攻撃等に対する対策はセッションIDをこまめに変更すること。セッションIDの変更にはセッション破棄、セッション再開を行うか、セッションID再取得用メソッド(changeSessionId()メソッド)を使う。