ユーザーが本人であることを確認すること。
会員制サイトで、会員しか閲覧できないようなページがある場合、 会員は最初にログインして、会員であることを認証する必要があります。
ユーザーに権限を与えること。
会員登録すると、ユーザーIDが発行され、 ユーザーIDに対して、権限が付与されます。
権限は単に、アリ、ナシだけでなく、 会員、優良会員、管理者などのように、レベル(ロール)を分けることもあります。
データが他の第三者によって改竄されていないこと。
セキュリティのログを正確に取ること。
故意にユーザーの不利益をもたらすコード。
悪意のあるJavaAppletや悪意のあるWebページを閲覧すると、 クッキーを盗まれたり、ウィルスに感染することがあります。
Webサイトを攻撃すること(そのままですが。。。)。
特定サイトにpingやTCP SYNを連発し、サーバを麻痺させるDoS、 セキュリティーホールをついたリクエストパラメータなどがあります。
詳しくないことに深入りして説明してもしょうがないので、 ここでは、DTD概要と簡単サンプルだけ示します。
web.xmlのセキュリティー関連のDTDをツリー表示にすると以下のようになります (見づらい。。)
落とし穴
*は複数指定可能。<url-pattern>や<http-method>
は複数指定できる。
パスは"/"からはじまるWebアプリルートからのパス。<url-pattern>や<form-login-page>など
BASIC認証の例。
<security-constraint> <web-resource-collection> <web-resource-name>Hoge</web-resource-name> <url-pattern>/jsp/secure/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>hoge</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> </login-config>
FORM認証の例。
<security-constraint> <web-resource-collection> <web-resource-name>Secure</web-resource-name> <url-pattern>/jsp/secure/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>hoge</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/jsp/login/login.jsp</form-login-page> <form-error-page>/jsp/login/loginFail.jsp</form-error-page> </form-login-config> </login-config>
BASIC認証+SSLの例。
<security-constraint> <web-resource-collection> <web-resource-name>Hoge</web-resource-name> <url-pattern>/jsp/secure/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>hoge</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> </login-config>
セキュリティー制限のかかったURLにアクセスすると、 ブラウザのポップアップウィンドウで、IDとパスワードが要求されます。 入力したIDとパスワードはBASE64エンコーディング(ほぼ平文) で送信されます。
実装は簡単ですが、ブラウザのBASIC認証ウィンドウが出るため、 デザインにこだわるWebサイトだと使いたくない場合もあります。
↓HTTP BASIC認証(IE6)
BASIC認証よりセキュリティーが強固ですが、 現在、全てのブラウザで実装されいるわけではないので、 あまり利用されていません。
↓HTTP DIGEST認証(IE6)
HTMLのFORMを使い認証を行います。 セキュリティー制限のかかったURLにアクセスしようとすると、 <form-login-config>で指定したページにリダイレクトされます。
JSPやHTMLでログインページを作ります。 作成するFORMの、 ACTIONは"j_security_check"、 名前フィールド名は"j_username"、 パスワードフィールド名"j_password" でなければなりません。
↓FORMの例
<form action="j_security_check" method="POST"> USER<input type="text" name="j_username"><br> PASSWORD<input type="password" name="j_password"><br> </form>
↓FORM認証
メソッド | 説明 |
---|---|
boolean HttpServletRequest.isUserInRole(String role); | 現在認証しているユーザーが指定したロールに含まれているか? |
String HttpServletRequest.getRemoteUser(); | 現在認証しているユーザー名を取得する。 |
Principal HttpServletRequest.getUserPrincipal(); | 現在認証しているユーザーのプリンシパルを取得する
(Principalからはユーザー名を取るだけなので、 用途はgetRemoteUser()と同じ)。 |