発生した事象
セキュリティ対策として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",
問題への処置
Nginx
のconf
から、X-XSS-Protectionヘッダを外す。
おわりに
Qiitaでも、NginxとRailsのセキュリティに関するメモが記載されていますが、
Rails5.1では、'X-XSS-Protectionは不要です。