Section5: Webアプリケーションのセキュリティ

認証と許可
種別説明
認証システム利用者が正当なユーザであることを確認する。ログイン機能など。
許可ユーザの権限に応じてリソースへのアクセスを許可すること。アクセス制御。
情報セキュリティの特性
特性説明
機密性権限を持ったユーザーだけがアクセスできること
完全性データの欠落や改竄がなく、整合性がとれた完全な状態であること
可用性必要なときにいつでも情報にアクセスできること
JavaEEで規定されている認証方式
方式暗号化の有無説明
BASIC認証×ブラウザのダイアログを使用して認証。BASE64で符号化されるが、暗号化はされない。
DIGEST認証ブラウザのダイアログを使用して認証。MD5で暗号化はされる。
FORM認証×ログインページとログイン失敗ページを作成する必要がある。暗号化されない。
CLIENT-CERT認証SSL接続のクライアント認証を利用する方式。クライアント証明のため、ユーザ名やパスワードは送信されない。
web.xmlで設定可能なセキュリティ関連の設定
設定内容タグ
ロールの定義security-roleタグ
ロールの別名を定義servletタグ内のsecurity-role-refタグ
認証方式に関する設定login-configタグ
リソースに対するセキュリティ制約の設定security-constraintタグ
web.xmlのsecurity-roleタグ
タグ説明
security-roleセキュリティロールの定義。
role-nameアクセス制御に使用するロールを定義する。「*」での指定も可能。ここで指定するロールは、サーブレットコンテナで設定されているロールでなければならない。(Tomcatの場合、tomcat-user.xmlに設定する)
web.xmlのsecurity-role-refタグ
タグ説明
servletサーブレットの設定。
security-role-refこのサーブレット内で使用するセキュリティロールの別名を定義する。
role-nameセキュリティーロールの別名。。
role-linksecurity-roleタグで指定したロール名。省略時はコンテナが適切なロール名を自動的にマッピングする。
(その他のservletタグの子タグは省略)
  • ロールの別名を使うことによって、ソースコードにロール名をハードコーディングしなくてすむ。
  • ロール名に変更が生じても、web.xml内でロールの別名とロール名とのマッピングを変更すれば、ソースコードを修正する必要がない。
web.xmlのlogin-configタグ
タグ説明
login-config認証方式に関する設定。
web.xmlのsecurity-constraintタグ
タグ説明
security-constraintセキュリティ制約に関する設定。
web-resource-collectionセキュリティ制約を課すリソース情報の定義。
web-resource-nameこのセキュリティ制約を課すリソース集合の名前。
url-pattern URLパターン。* を指定することが可能。
http-method制限を設定したいメソッドを指定する。GETのみを指定した場合、POSTでは制限なしにアクセスできてしまうことに注意。省略時は全てのメソッドを制限する。複数タグを指定可能。
auth-constraintアクセス許可に関する制約。
role-nameアクセスを許可するロール名。複数タグ指定可能。
user-data-constraint通信方法に関する制約。
transport-guarantee 保護レベルの指定。指定値は
  • NONE
  • INTEGRAL(完全性)
  • CONFIDENTIAL(機密性)
Tomcat6.0では、none以外の場合SSL通信を要求する。
FORM認証のログインページで使用するHTMLタグの属性の制約
属性
formタグのaction属性j_security_check
ユーザ名の入力フィールドのname属性j_username
パスワードの入力フィールドのname属性j_password
HttpServletRequestの認証関連の情報を取得するAPI
シグネチャ説明
public String getAuthType()使用している認証方式の名前を返す。認証されていない場合はnullを返す。
public String getRemoteUser()リクエストを生成したユーザが認証されている場合はそのユーザのログイン名を返す。認証されていない場合はnullを返す。
public java.security.Principal getUserPrincipal()現在の認証ユーザの名前を含む java.security.Principal オブジェクトを返す。認証されていない場合はnullを返す。
public boolean isUserInRole(String role)認証されているユーザが指定された論理的なロールに含まれているかどうかを返す。指定するロール名はsecurity-role-refタグで指定した別名でもよい。
inserted by FC2 system