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()メソッド)を使う。









このブログの人気の投稿

1月20日(木)3、4コマ目

1月6日(木)3、4コマ目

1月13日(木)3、4コマ目