.. _SpringSecurityLinkageWithBrowser:
ブラウザのセキュリティ対策機能との連携
================================================================================
.. only:: html
.. contents:: 目次
:local:
Overview
--------------------------------------------------------------------------------
本節では、ブラウザが提供しているセキュリティ対策機能との連携方法について説明する。
主要なWebブラウザは、ブラウザが提供する機能が悪用されないようにするために、いくつかのセキュリティ対策機能を提供している。
ブラウザが提供するセキュリティ対策機能の一部は、サーバ側でHTTPのレスポンスヘッダを出力することで動作を制御することができる。
Spring Securityは、セキュリティ関連のレスポンスヘッダを出力する機能を用意することで、Webアプリケーションのセキュリティを強化する仕組みを提供している。
.. note:: **セキュリティリスク**
セキュリティ関連のレスポンスヘッダを出力しても、セキュリティへのリスクが100%なくなるわけではない。
あくまで、セキュリティリスクを減らすためのサポート機能と考えておくこと。
なお、セキュリティヘッダのサポート状況はブラウザによってことなる。
.. note:: **HTTPヘッダの上書き**
後述の設定を行ったとしても、アプリケーションにより、HTTPヘッダが上書きされる可能性は存在する。
デフォルトでサポートしているセキュリティヘッダ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Spring Securityがデフォルトでサポートしているレスポンスヘッダは以下の9つである。
* Cache-Control (Pragma, Expires)
* X-Frame-Options
* X-Content-Type-Options
* X-XSS-Protection
* Strict-Transport-Security
* Content-Security-Policy(Content-Security-Policy-Report-Only)
* Public-Key-Pins(Public-Key-Pins-Report-Only)
* Referrer-Policy
* Feature-Policy
.. tip:: **ブラウザのサポート状況**
これらのヘッダに対する処理は、一部のブラウザではサポートされていない。ブラウザの公式サイトまたは以下のページを参照されたい。
* https://www.owasp.org/index.php/HTTP_Strict_Transport_Security_Cheat_Sheet (Strict-Transport-Security)
* https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet (X-Frame-Options)
* https://www.owasp.org/index.php/OWASP_Secure_Headers_Project#tab=Headers (X-Content-Type-Options, X-XSS-Protection, Content-Security-Policy, Public-Key-Pins)
.. note:: **Referrer-Policyヘッダ**
Spring Security 4.2より、ブラウザに\ `Referrer Policy `_\ を指示するためのヘッダである\ `Referrer-Policyヘッダ `_\ がサポートされた。
詳細については次版以降の開発ガイドラインで記載する予定である。
.. note:: **Feature-Policyヘッダ**
Spring Security 5.1より、ブラウザに\ `Feature-Policy `_\ を指示するためのヘッダである\ `Feature-Policyヘッダ `_\ がサポートされた。
詳細については次版以降の開発ガイドラインで記載する予定である。
.. note:: **Clear-Site-Dataヘッダ**
Spring Security 5.2より、ブラウザに\ `Clear-Site-Data `_\ を指示するためのヘッダである\ `Clear-Site-Dataヘッダ `_\ がサポート可能となった。
詳細は \ :ref:`SpringSecurityAuthenticationLogout`\ を参照されたい。
Cache-Control
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Cache-Controlヘッダは、コンテンツのキャッシュ方法を指示するためのヘッダである。
保護されたコンテンツがブラウザにキャッシュされないようにすることで、権限のないユーザーが保護されたコンテンツを閲覧できてしまうリスクを減らすことができる。
コンテンツがキャッシュされないようにするためには、以下のようなヘッダを出力する。
* レスポンスヘッダの出力例
.. code-block:: text
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
.. note:: **Cache-Controlヘッダの上書き**
Spring MVCのControllerクラスが \ ``@SessionAttributes`` \のフォームクラスを定義している、もしくは、
リクエストハンドラで \ ``@SessionAttributes`` \属性のModelを使用している場合は、 Cache-Controlヘッダが上書きされる。
.. note:: **HTTP1.0互換のブラウザ**
Spring SecurityはHTTP1.0互換のブラウザもサポートするために、PragmaヘッダとExpiresヘッダも出力する。
X-Frame-Options
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
X-Frame-Optionsヘッダは、フレーム(\ ````\ または\ ``