LinuCレベル3 セキュリティスペシャリスト セキュアプロトコルによる各種機能の実装 問23
セキュアプロトコルによる各種機能の実装/Web サーバーのセキュリティ強化nginxの server ブロックに add_header Strict-Transport-Security "max-age=31536000" always; を記述している。同じ server ブロックに location /api/ { add_header X-Content-Type-Options nosniff; … } を追加したところ、/api/ 配下の応答にだけHSTSのヘッダーが付かなくなった。原因として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「セキュアプロトコルによる各種機能の実装」に対応。実際の試験問題ではありません)
- AHSTSのヘッダーはHTTP/2の応答にしか付かないため、/api/ がHTTP/1.1で処理されるとヘッダーが省略される
- BX-Content-Type-Options と Strict-Transport-Security は同時に送れない組み合わせのため、後の指定が優先される
- Cadd_header は、その階層に add_header が1つでもあると上位の階層の add_header を引き継がないため
- Dalways を付けた add_header はエラー応答にだけ付くため、/api/ の正常な応答(200)にはヘッダーが付かない
正解:C
解説
nginxの add_header は、現在の階層(location など)に add_header が1つも無い場合に限って、上位の階層(server や http)の add_header を引き継ぎます。既定の動作では、location に add_header を1つでも書くと、server ブロックに書いたHSTSなどのヘッダーはその location では付かなくなります。対策として、location 側にも必要なヘッダーをすべて書くか、共通のヘッダーをまとめたファイルを各階層で include します。always は、200などの成功応答に加えて、エラー応答にもヘッダーを付けるためのパラメータです。
選択肢ごとの解説
- A誤り。add_header で付けるヘッダーはHTTPのバージョンに関係なく付与されます。HSTSはHTTP/1.1のHTTPS応答でも有効です。
- B誤り。レスポンスヘッダーは複数を同時に送れます。X-Content-Type-Options とHSTSを一緒に返すことに問題はありません。
- C正しい。add_header は、その階層に add_header が無い場合に限り上位の設定を引き継ぐため、location に書くとserver側のHSTSが付かなくなります。
- D誤り。always は、成功応答に加えて4xx・5xxなどのエラー応答にもヘッダーを付けるパラメータで、エラー応答だけに限定するものではありません。