6.2.3. セキュアハンドラ

本ハンドラでは、セキュリティ関連のヘッダを、レスポンスオブジェクト(HttpResponse)に対して設定する。

デフォルトでは、以下のレスポンスヘッダを設定する。

  • X-Frame-Options: SAMEORIGIN
  • X-XSS-Protection: 1; mode=block
  • X-Content-Type-Options: nosniff
  • Referrer-Policy: strict-origin-when-cross-origin
  • Cache-Control: no-store

本ハンドラでは、以下の処理を行う。

  • セキュリティ関連のレスポンスヘッダの設定処理

処理の流れは以下のとおり。

../../../../_images/flow42.png

6.2.3.2. モジュール一覧

<dependency>
  <groupId>com.nablarch.framework</groupId>
  <artifactId>nablarch-fw-web</artifactId>
</dependency>

6.2.3.3. 制約

HTTPレスポンスハンドラ よりも後ろに設定すること
本ハンドラで設定したレスポンスヘッダを、 HTTPレスポンスハンドラ がServlet APIのレスポンスオブジェクトに設定するため。

6.2.3.4. デフォルトで適用されるヘッダの値を変更したい

要件により、デフォルトで適用されるセキュリティ関連のヘッダの値を変更したい場合がある。

例えば、フレーム内の表示を全て許可しない場合には、 X-Frame-Options ヘッダの値を DENY に変更する必要がある。 このような場合は、コンポーネント設定ファイルに明示的に設定することで対応する。

以下に例を示す。

<component class="nablarch.fw.web.handler.SecureHandler">
  <property name="secureResponseHeaderList">
    <list>
      <!-- X-Frame-Optionsの値を明示的に指定 -->
      <component class="nablarch.fw.web.handler.secure.FrameOptionsHeader">
        <property name="option" value="DENY" />
      </component>

      <!-- 上記以外のヘッダはデフォルトのまま -->
      <component class="nablarch.fw.web.handler.secure.XssProtectionHeader" />
      <component class="nablarch.fw.web.handler.secure.ContentTypeOptionsHeader" />
      <component class="nablarch.fw.web.handler.secure.ReferrerPolicyHeader" />
      <component class="nablarch.fw.web.handler.secure.CacheControlHeader" />
    </list>
  </property>
</component>

補足

値を変更するためのプロパティの詳細は、以下のクラスを参照。

6.2.3.5. デフォルト以外のレスポンスヘッダを設定する

デフォルト以外のセキュリティ関連のレスポンスヘッダを設定する手順を以下に示す。

  1. SecureResponseHeader インタフェースの実装クラスで、 レスポンスヘッダに設定するフィールド名と値を指定する。

補足

ロジックを含まない単純なレスポンスヘッダを作成する場合は、 SecureResponseHeaderSupport を継承して作成すればよい。

  1. 本ハンドラ(SecureHandler)に、No1 で作成したクラスを設定する。

重要

SecureResponseHeader 実装クラスを設定する際は、 デフォルトで適用されていたコンポーネントも設定すること。

以下に設定ファイルの例を示す。

<component class="nablarch.fw.web.handler.SecureHandler">
  <property name="secureResponseHeaderList">
    <list>
      <component class="nablarch.fw.web.handler.secure.FrameOptionsHeader" />
      <component class="nablarch.fw.web.handler.secure.XssProtectionHeader" />
      <component class="nablarch.fw.web.handler.secure.ContentTypeOptionsHeader" />
      <component class="nablarch.fw.web.handler.secure.ReferrerPolicyHeader" />
      <component class="nablarch.fw.web.handler.secure.CacheControlHeader" />

      <!-- 追加で作成したコンポーネント -->
      <component class="nablarch.fw.web.handler.secure.SampleSecurityHeader" />
    </list>
  </property>
</component>

6.2.3.6. Content-Security-Policyレスポンスヘッダを設定する

Content-Security-Policyレスポンスヘッダを設定する手順を以下に示す。

  1. 本ハンドラ(SecureHandler)に、ContentSecurityPolicyHeader を設定する。
  2. ContentSecurityPolicyHeaderpolicy を設定する。

以下に例を示す。

<component class="nablarch.fw.web.handler.SecureHandler">
  <property name="secureResponseHeaderList">
    <list>
      <component class="nablarch.fw.web.handler.secure.FrameOptionsHeader" />
      <component class="nablarch.fw.web.handler.secure.XssProtectionHeader" />
      <component class="nablarch.fw.web.handler.secure.ContentTypeOptionsHeader" />
      <component class="nablarch.fw.web.handler.secure.ReferrerPolicyHeader" />
      <component class="nablarch.fw.web.handler.secure.CacheControlHeader" />

      <!-- Content-Security-Policyを付与するコンポーネント -->
      <component class="nablarch.fw.web.handler.secure.ContentSecurityPolicyHeader">
        <!-- ポリシーを設定する -->
        <property name="policy" value="default-src 'self'" />
      </component>
    </list>
  </property>
</component>

この場合、 Content-Security-Policy: default-src 'src' といったレスポンスヘッダが書き出される。

report-only モードで動作させる場合は reportOnlytrue に設定する。

以下に例を示す。

<component class="nablarch.fw.web.handler.SecureHandler">
  <property name="secureResponseHeaderList">
    <list>
      <component class="nablarch.fw.web.handler.secure.FrameOptionsHeader" />
      <component class="nablarch.fw.web.handler.secure.XssProtectionHeader" />
      <component class="nablarch.fw.web.handler.secure.ContentTypeOptionsHeader" />
      <component class="nablarch.fw.web.handler.secure.ReferrerPolicyHeader" />
      <component class="nablarch.fw.web.handler.secure.CacheControlHeader" />

      <component class="nablarch.fw.web.handler.secure.ContentSecurityPolicyHeader">
        <property name="policy" value="default-src 'self'; report-uri http://example.com/report" />
        <!-- report-onlyモードで動作させる -->
        <property name="reportOnly" value="true" />
      </component>
    </list>
  </property>
</component>

この場合、 Content-Security-Policy-Report-Only: default-src 'src'; report-uri http://example.com/report といったレスポンスヘッダが書き出される。