Rails
nginx

【Rails5.1】NginxでX-XSS-Protectionヘッダを指定するとChromeに怒られる

発生した事象

セキュリティ対策としてNginxにX-XSS-Protectionヘッダを入れたが、Chromeの開発者ツールでエラーが出る。

環境

  • AWS
  • Ubuntu 16.04
  • Nginx
  • Unicorn 5.3.1
  • Rails 5.1
  • Ruby 2.4.1

エラー内容

Chromeの開発者ツールで以下のエラーが出ます。

Error parsing header X-XSS-Protection: 1; mode=block, 1; mode=block: expected semicolon at character position 14. The default protections will be applied.

原因

原因は、NginxとRailsアプリケーションで2重にヘッダを出力しているためでした。
以下のteratailの記事が参考になりました。
http通信ヘッダーエラー?

Railsセキュリティガイドによると、標準でX-XSS-Protectionヘッダを入れるとのことです。

Railsアプリケーションから受け取るすべてのHTTPレスポンスには、以下のセキュリティヘッダーがデフォルトで含まれています。

config.action_dispatch.default_headers = {
  'X-Frame-Options' => 'SAMEORIGIN',
  'X-XSS-Protection' => '1; mode=block',
  'X-Content-Type-Options' => 'nosniff'
}

確かに、Railsソースコードにも記載がありました。

27        "X-Frame-Options" => "SAMEORIGIN",
28        "X-XSS-Protection" => "1; mode=block",
29        "X-Content-Type-Options" => "nosniff",
30        "X-Download-Options" => "noopen",

問題への処置

Nginxconfから、X-XSS-Protectionヘッダを外す。

おわりに

Qiitaでも、NginxとRailsのセキュリティに関するメモが記載されていますが、
Rails5.1では、'X-XSS-Protectionは不要です。