過去問ドリル

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 セキュリティスペシャリストの出題範囲「セキュアプロトコルによる各種機能の実装」に対応。実際の試験問題ではありません)

正解: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などのエラー応答にもヘッダーを付けるパラメータで、エラー応答だけに限定するものではありません。
LinuCレベル3 セキュリティスペシャリストの問題を演習モードで解く