Railsの HTTP Response の default headers について調べてみた

こんにちは!kossyです!




今回はRailsの HTTP Response の default headers について調べてみたので、
ブログにまとめてみたいと思います。




環境
Rails 6.1.3




default headers について

railsguides.jp

Railsのレスポンスヘッダーにはデフォルトでいくつかのオプションが設定されています。

実装箇所は以下です。

github.com

抜粋したものがこちら。

    config.action_dispatch.default_headers = {
      "X-Frame-Options" => "SAMEORIGIN",
      "X-XSS-Protection" => "1; mode=block",
      "X-Content-Type-Options" => "nosniff",
      "X-Download-Options" => "noopen",
      "X-Permitted-Cross-Domain-Policies" => "none",
      "Referrer-Policy" => "strict-origin-when-cross-origin"
    }

6種類の default headers が実装されていましたので、一つずつ用途を確認します。


X-Frame-Options

クリックジャッキング攻撃対策として設定するレスポンスヘッダーで、以下の2種類の値を設定することができます。(ALLOW-FROM uri は廃止され、最新のブラウザでは機能しないようです)

*value *description
DENY frame、iframe、embed、または object を用いてページをレンダリングできない
SAMEORIGIN 同じオリジンのリソースであれば表示可能

RailsではSAMEORIGINがデフォルト値になっていますので、もしDENYにしたい場合は、以下のように設定すればOKです。

# Railsガイドではapplication.rb内で設定していますが、config/environments/**.rb でも設定できます。

# config/application.rb

config.action_dispatch.default_headers = {
  'X-Frame-Options' => 'DENY'
}

試しにconfig/environments/development.rbでDENYと設定してテストしてみました。

f:id:kossy-web-engineer:20210510001032p:plain

X-Frame-optionsヘッダーがDENYになりました。


X-XSS-Protection

XSSを検知すると、ページの読み込みを中止できるレスポンスヘッダーです。

MDNによると、chromeはX-XSS-Protectionを廃止しており、FireFoxブラウザは非サポート(今後もサポート予定なし)のように、現在はあまり使われていないレスポンスヘッダのようです。

ChromeがX-XSS-Protectionを廃止した背景には、XSS Auditor にセキュリティホールが非常に多かったことがあるようです。

www.zdnet.com

developer.mozilla.org

X-Content-Type-Options

Content-Typeを無視してHTMLで処理を行うブラウザがあり(IEとかIEとかIEとか)、X-Content-Type-Optionsレスポンスヘッダーにnosniffを指定することによって、
Content-TypeのMIME-TYPEの形式で処理を強制することができるものです。

*value *description
nosniff Content-TypeのMIME-TYPEの形式で処理を強制する

qiita.com

developer.mozilla.org

www.atmarkit.co.jp

X-Download-Options

ユーザーがダウンロードしたファイルを直接開くことを防止できるレスポンスヘッダーです。

*value *description
noopen ユーザーがダウンロードしたファイルを直接開くことを防止する

なお、下記ページによるとIE8固有のレスポンスヘッダーとのことでした。

www.nwebsec.com


X-Permitted-Cross-Domain-Policies

PDFやFlashPlayerに関するレスポンスヘッダーです。

*value *description
none 全てのポリシーファイルを不許可

www.adobe.com

Referrer-Policy

リファラーの制御を可能にするレスポンスヘッダーです。

設定値に関しては以下の記事が詳しかったです。

qiita.com

Railsでdefaultで付与されるstrict-origin-when-cross-originは、同じオリジンへのリクエストの場合は、生成元、パス、およびクエリ文字列を送信し、
クロスドメインのリクエストの場合は、HTTPSからHTTPSの通信またはHTTPからHTTPの通信の時にのみ生成元、パス、およびクエリ文字列を送信します。

developer.mozilla.org


まとめ

最近のブラウザでは使われてないレスポンスヘッダーもあるみたいですね。どこかで廃止についての議論がありそうな気がしています。