1月23日(月)1、2コマ目

今日、やったこと

  • サニタイジング
  • エラーページ
  • フィルター

今日のホワイトボード

サニタイジング

ユーザー入力内容をブラウザに出力する際、HTMLタグが含まれていると、問題が発生することがあります。例えば、<script>タグでJavaScriptが入力されると、JavaScriptを実行することなります。

そこで、出力の際に本来HTMLタグが含まれない箇所にHTMLタグがある場合、HTMLタグとして出力しないようにサニタイジングを行います。

例えば、<script>と入力された場合、<は&lt;へ、>は&gt;に置き換えて出力します。

図 サニタイジング

サニタイジングを自力でやるのはめんどくさいため、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を採番するために利用。

図 シーケンス


次回は

課題の時間です。

このブログの人気の投稿

1月24日(火)1、2コマ目

1月6日(金)1、2コマ目

1月17日(火)1、2コマ目