Posted at

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

More than 1 year has passed since last update.


発生した事象

セキュリティ対策として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は不要です。