com4dc’s blog

Javaプログラマーのはずだけど運用してます

Spring Securityのドキュメントを1から斜め読む 3

細かいヘッダとかの話。

細かすぎて知らないものが結構あったのと、多分デフォルトで有効になっているため意識して認識できてるものが少ない。

Referrer Policy

  • Referrerポリシーは、Webアプリケーションが活用することができる。ユーザーが最後に訪れたページを含むReferrerフィールドを管理するために。
  • Spring Securityのアプローチは Referrerポリシーヘッダを使用しており、異なるポリシーを提供する
    • どういうことだ??
Referrer-Policy: same-origin
  • Referrerポリシーレスポンスヘッダは、ユーザーが以前どこにいたかのソースを宛先に知らせるようにブラウザに指示する

Feature Policy

  • Feature Policy はWeb開発者が特定の API やWeb機能の動作を明示的に有効化、無効化、変更できるようにするためのメカニズムである
Feature-Policy: geolocation 'self'
  • Feature Policy によって開発者はあなたのサイトを通じて、特定の機能をブラウザの Policies をセットしOpt-inできる
  • これらのポリシーはサイトがアクセスできるAPIを制限したり、特定の機能のためにブラウザのデフォルト動作を変更する

Clear Site Data

  • Clear Site Data はHTTP レスポンスのヘッダにこれが含まれている場合、ブラウザサイドのデータ、Cookie, Local Storage などを明示的に削除する機能である
Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"
  • これはログアウトの際の良いクリーンアップ動作である
    • これめっちゃ良いじゃん。使ってるんだろうか。

Custom Headers

  • Spring Security はより一般的なセキュリティヘッダをアプリケーションに追加する便利な仕組みを持っている
  • しかし、同時にカスタムヘッダを追加することができる Hook も提供している
    • Hook ??

5.2.3 HTTP

  • 全てのHTTPベースの通信(静的リソースを含む)は TLSの利用により保護されるべき
  • フレームワークとして、Spring Securityは HTTP 接続を制御しない
  • そのため、HTTPS を直接サポートしていない
  • しかし、HTTPS を利用するための助けとなるいくつかの機能を提供する

Redirect to HTTPS

  • クライアントがHTTPを利用した時、Spring Security はHTTPSへリダイレクトするように構成することができる。ServletもWebFlux環境のどちらでも。

Strict Transport Security

Proxy Server Configuration

  • Proxyサーバーを使用する時、アプリケーションが適切に設定されていることを確認するのが重要
    • 例えば、多くのアプリケーションはロードバランサを持っており、 https://example.com へのリクエストが https://192.168.1:8080アプリケーションサーバーにリクエストを転送することで応答するものがある
    • もし適切な設定がなければ、アプリケーションサーバーはロードバランサの存在を知ることなく、 https://192.168.1:8080 からのリクエストとして扱う
  • これを修正するために RFC 7239 を使用してロードバランサを使用していることを指定する
  • アプリケーションにこれを認識させるために X-Forwarded ヘッダを認識するように構成する必要がある 例えば、Tomcat は RemoteIpValue を使用し、Jetty は ForwardedRequestCustomizer を使用する
  • 別の手段として、Springユーザーは ForwardedHeaderFilter を使用する手もある

  • Spring Boot ユーザーは server.use-forward-headers プロパティを使うことでアプリケーションの適切な構成を使用できる

次からようやく具体的なモジュールとかの話