1月23日(月)1、2コマ目
今日、やったこと
- サニタイジング
- エラーページ
- フィルター
今日のホワイトボード
サニタイジング
ユーザー入力内容をブラウザに出力する際、HTMLタグが含まれていると、問題が発生することがあります。例えば、<script>タグでJavaScriptが入力されると、JavaScriptを実行することなります。
そこで、出力の際に本来HTMLタグが含まれない箇所にHTMLタグがある場合、HTMLタグとして出力しないようにサニタイジングを行います。
例えば、<script>と入力された場合、<は<へ、>は>に置き換えて出力します。
|
| 図 サニタイジング |
サニタイジングを自力でやるのはめんどくさいため、Apache Commons Textライブラリを利用しました。
エラーページ
いままではエラーが発生すると、そのまま出力していました。
しかし、これではサーバー情報を公開することになるため、セキュリティ上問題です。
そこで、エラーが発生したらあらかじめ用意したエラーページを表示するようにします。
|
| 図 エラーページ |
リダイレクトとフォワードの違い
リダイレクトはクライアントがリダイレクト先を改めてリクエストします。よって、クライアントは2回リクエストすることになります。
フォワードはフォワード先をサーバーが読み込み、出力します。そのため、フォワード先は同じアプリケーション内に限定されます。
|
| 図 リダイレクトとフォワード |
セッションIDを推測しずらくする
セッションIDが漏洩すると、セッションハイジャックにつながります。
セッションID漏洩を防ぐ手段として、前回は
- 通信経路の暗号化(HTTPSの利用)
- JavaScriptがCookieにアクセスできないようにする
の2つをあげました。これらに加えて、セッションIDを変更するも重要です。
|
| 図 セッションIDを変更する |
フィルターを使う
非認証ユーザーが認証ユーザーのみアクセス可能なページをリクエストした際、自動的にログインページを表示するためにフィルターを利用しました。
フィルターはサーブレット(JSPも)より先に実行されます。フィルターで認証済みかチェックし、非認証なら、ログインページを表示します。
|
| 図 フィルターで認証済みかチェック |
今日のソースコード
今日で完成です。
User.java
ユーザー情報受け渡し用クラス。
UserDAO.java
ユーザーマスタテーブルアクセス用クラス。
Service.java
機能提供クラス。
PasswordUtil.java
パスワードハッシュ化用クラス。
NofFilledException.java
未入力項目がある場合にスローする検査例外クラス。
InvalidPasswordException.java
パスワード要件を満たさない時にスローする検査例外クラス。
IndexSrv.java
起動直後にアクセスする。ログインボタンクリック時の処理。
UserInfoSrv.java
ログイン後、遷移する。ユーザー情報ページをフォワードする。
AuthFilter.java
UserInfoSrvをリクエストした際、認証済みか確認するフィルタ。
index.jsp
ログインページ。
userinfo.jsp
ユーザー情報表示ページ。
error.jsp
エラーページ。
web.xml
アプリケーション設定ファイル。エラーページを指定。
シーケンス
IDを採番するために利用。
|
| 図 シーケンス |
次回は
課題の時間です。





