Spring Security概要 ================================================================================ .. only:: html .. contents:: 目次 :local: Overview -------------------------------------------------------------------------------- | Spring Securityとは、アプリケーションのセキュリティを担う「認証」、「認可」の2つを | 主な機能として提供している。 | 認証機能とは、なりすましによる不正アクセスに対抗するため、ユーザを識別する機能である。 | 認可機能とは、認証された(ログイン中の)ユーザの権限に応じて、 | システムのリソースに対するアクセス制御を行う機能である。 | また、HTTPヘッダーを付与する機能を有する。 | Spring Securityの概要図を、以下に示す。 .. figure:: ./images/spring_security_overview.png :alt: Spring Security Overview :width: 80% :align: center **Picture - Spring Security Overview** | Spring Securityは、認証、認可のプロセスを何層にも連なる | ServletFilter の集まりで実現している。 | また、パスワードハッシュ機能や、JSPの認可タグライブラリなども提供している。 認証 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | 認証とは、正当性を確認する行為であり、ネットワークやサーバへ接続する際に | ユーザ名とパスワードの組み合わせを使って、利用ユーザにその権利があるかどうかや、 | その人が利用ユーザ本人であるかどうかを確認することである。 | Spring Securityでの使用方法は、\ :doc:`Authentication`\ を参照されたい。 パスワードハッシュ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | 平文のパスワードから、ハッシュ関数を用いて計算されたハッシュ値を、元のパスワードと置き換えることである。 | Spring Securityでの使用方法は、\ :doc:`PasswordHashing`\ を参照されたい。 認可 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | 認可とは、認証された利用者がリソースにアクセスしようとしたとき、 | アクセス制御処理でその利用者がそのリソースの使用を許可されていることを調べることである。 | Spring Securityでの使用方法は、\ :doc:`Authorization`\ を参照されたい。 .. _howtouse_springsecurity: How to use -------------------------------------------------------------------------------- | Spring Securityを使用するために、以下の設定を定義する必要がある。 pom.xmlの設定 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | Spring Securityを使用する場合、以下のdependencyを、pom.xmlに追加する必要がある。 .. code-block:: xml org.terasoluna.gfw terasoluna-gfw-security-core org.terasoluna.gfw terasoluna-gfw-security-web .. tabularcolumns:: |p{0.10\linewidth}|p{0.90\linewidth}| .. list-table:: :header-rows: 1 :widths: 10 90 * - 項番 - 説明 * - | (1) - | terasoluna-gfw-security-coreは、webに依存しないため、ドメイン層のプロジェクトから使用する場合は、 | terasoluna-gfw-security-coreのみをdependencyに追加すること。 * - | (2) - | terasoluan-gfw-webはwebに関連する機能を提供する。terasoluna-gfw-security-coreにも依存しているため、 | Webプロジェクトは、terasoluna-gfw-security-webのみをdependencyに追加すること。 Web.xmlの設定 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: xml :emphasize-lines: 5,13-20 contextConfigLocation classpath*:META-INF/spring/applicationContext.xml classpath*:META-INF/spring/spring-security.xml org.springframework.web.context.ContextLoaderListener springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain /* .. tabularcolumns:: |p{0.10\linewidth}|p{0.90\linewidth}| .. list-table:: :header-rows: 1 :widths: 10 90 * - 項番 - 説明 * - | (1) - | contextConfigLocationには、applicationContext.xmlに加えて、 | クラスパスにSpring Security設定ファイルを追加する。本ガイドラインでは、「spring-security.xml」とする。 * - | (2) - | filter-nameには、Spring Securityの内部で使用されるBean名、「springSecurityFilterChain」 で定義すること。 * - | (3) - 各種機能を有効にするための、Spring Securityのフィルタ設定。 * - | (4) - 全てのリクエストに対して設定を有効にする。 spring-security.xmlの設定 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | web.xmlにおいて指定したパスに、spring-security.xmlを配置する。 | 通常はsrc/main/resources/META-INF/spring/spring-security.xmlに設定する。 | 以下の例は、雛形のみであるため、詳細な説明は、次章以降を参照されたい。 * spring-mvc.xml .. code-block:: xml .. tabularcolumns:: |p{0.10\linewidth}|p{0.90\linewidth}| .. list-table:: :header-rows: 1 :widths: 10 90 * - 項番 - 説明 * - | (1) - | use-expressions="true"と記載することで、アクセス属性のSpring EL式を有効することができる。 \ .. note:: use-expressions="true" で有効になるSpring EL式は、以下を参照されたい。 \ `Expression-Based Access Control `_\ Appendix -------------------------------------------------------------------------------- .. _SpringSecurityAppendixSecHeaders: セキュアなHTTPヘッダー付与の設定 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 以下のようにspring-security.xmlの\ ````\ の内の\ ````\ 要素を設定することで、HTTPレスポンスに自動でセキュリティに関するヘッダを設定することができる。 これらのHTTPレスポンスヘッダをつけることにより、Webブラウザが攻撃を検知して対処できる。 必須の設定ではないが、セキュリティ強化のために設定しておくことを推奨する。 .. code-block:: xml 本設定で、以下の項目に関するHTTPレスポンスヘッダが設定される。 * Cache-Control * X-Content-Type-Options * Strict-Transport-Security * X-Frame-Options * X-XSS-Protection .. tabularcolumns:: |p{0.2\linewidth}|p{0.5\linewidth}||p{0.3\linewidth}| .. list-table:: :header-rows: 1 :widths: 20 50 30 * - HTTPヘッダ名 - 設定が不適切(未設定含む)な場合の問題 - 適切に設定した場合の挙動 * - | \ ``Cache-Control``\ - | あるユーザーがログインして閲覧できるコンテンツがキャッシュされ、ログアウト後に別ユーザーも閲覧できてしまう場合がある。 - | コンテンツをキャッシュしないように指示をして、ブラウザがサーバの情報を常に取得するようにする。 * - | \ ``X-Content-Type-Options``\ - | ブラウザが、Content-Typeで内容を決めずにコンテンツの中身を調べて動作させる内容を判断してしまい、想定しないScriptが実行されてしまう場合がある。 - | ブラウザが、Content-Typeで内容を決めずにコンテンツの中身を調べて動作させる内容を判断しないようにする。MIMEタイプが一致しない場合、Scriptが実行されることを制限する。 * - | \ ``Strict-Transport-Security``\ - | セキュアなページにHTTPSでアクセスされることを期待しているにも関わらず、HTTPでアクセスされた際に、HTTP由来の攻撃を受ける可能性がある。(例: 中間攻撃者がユーザーのHTTPリクエストを傍受し、悪意のあるサイトへリダイレクトさせる。) - | 一度正規のWebサイトへHTTPSでアクセスすれば、ブラウザは自動的にHTTPSのみを用いるよう理解して、悪意のあるサイトへ誘導されるという中間者攻撃の実行を防ぐ。 * - | \ ``X-Frame-Options``\ - | 悪意あるWebサイトAの画面を透過処理で見えなくし、代わりに\ ``