9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

nginxの設定ミスで起こるレスポンスヘッダの出力不備

Last updated at Posted at 2018-05-28

はじめに

この記事は下記リンクの日本語翻訳記事です

翻訳が誤っている場合はコメントか@no1zy_secまでお知らせいただけると幸いです。

[add_header_redefinition] add_headerディレクティブによるレスポンスヘッダの再定義

残念なことに、多くの人々はディレクティブがどのように引き継がれるかを知りません。
ネストされたレベルに新しいレスポンスヘッダ追加しようとしているとき、add_headerディレクティブを誤って使用する人がよくいます。この機能はNginxのドキュメントで言及されています。

There could be several add_header directives. These directives are inherited from the previous level if and only if there are no add_header directives defined on the current level.

日本語訳:
いくつかのadd_headerディレクティブがある可能性があります。これらのディレクティブは現在のレベルにadd_headerが無い場合のみ、以前のレベルから引き継がれます。

そのロジックは非常に単純です。ヘッダーをとあるレベル( server セクションなど)に設定して、locationなどの低いレベルに他のヘッダーを設定すると、最初のヘッダーは破棄されます。

簡単なチェック

  • 設定:
server {
  listen 80;
  add_header X-Frame-Options "DENY" always;
  location / {
      return 200 "index";
  }

  location /new-headers {
    # Add special cache control
    add_header Cache-Control "no-cache, no-store, max-age=0, must-revalidate" always;
    add_header Pragma "no-cache" always;

    return 200 "new-headers";
  }
}
  • /にリクエストをする (X-Frame-Optionsヘッダがserverのレスポンスヘッダにあります。)
GET / HTTP/1.0

HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Mon, 09 Jan 2017 19:28:33 GMT
Content-Type: application/octet-stream
Content-Length: 5
Connection: close
X-Frame-Options: DENY

index
  • /new-headersにリクエストをする (Cache-ControlPragmaヘッダはありますが、X-Frame-Optionsヘッダがありません。)
GET /new-headers HTTP/1.0


HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Mon, 09 Jan 2017 19:29:46 GMT
Content-Type: application/octet-stream
Content-Length: 11
Connection: close
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache

new-headers

対策

いくつかの解決策があります。

  • 重要なヘッダーを複製します。
  • あるレベルで全てのヘッダーを設定する(serverセクションがおすすめです)
  • ngx_headers_moreモジュールを使用する。

関連リンク

nginxの設定ミスで起こるHTTP Splitting
nginxの設定ミスで起こるSSRF
nginxの設定ミスで起こるパス トラバーサル
nginxの設定ミスで起こるMultiline response headers
nginxの設定ミスで起こるreferer/origin検証の問題
nginxの設定ミスで起こるHostヘッダフォージェリ
nginxの設定ミスで起こるリファラの検証不備

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?