しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET でカスタム HTTP ヘッダを追加する方法

機密情報を含むJSONには X-Content-Type-Options: nosniff をつけるべき - 葉っぱ日記

この記事を見て、そういえば ASP.NET でカスタム HTTP ヘッダを追加する方法を知らないなと思ったので、Web.config だけで解決できないか調べてみました。

結論から書くと、Web.config だけでカスタム HTTP ヘッダを追加することが出来ます。ただし IIS 7.0 以降のみ対応になります。

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-Content-Type-Options" value="nosniff"/>
    </customHeaders>
  </httpProtocol>
</system.webServer>

IIS 7.0 から追加された system.webServer 要素にはいろんな設定項目がありますね。そしてカスタム HTTP ヘッダを追加するための設定項目もあったので、上記の例のように書くと全てのリクエストで X-Content-Type-Options: nosniff ヘッダを出力することが出来ます。

実際に HTTP リクエストをキャプチャしてみました。リクエスト先は ASP.NET MVC で作ったアプリケーションです。

f:id:shiba-yan:20130518161218p:plain

ちゃんと指定したヘッダが出力されていますね。ASP.NET MVC などを使っていると、アクションフィルタなどで解決したくなりますが、Web.config だけで対応できるのはお手軽ですね。

追記

X-Content-Type-Options ヘッダ以外にも X- から始まるヘッダはあるので、それらも追加してみました。

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-Content-Type-Options" value="nosniff" />
      <add name="X-Frame-Options" value="DENY" />
      <add name="X-XSS-Protection" value="1" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

それぞれのヘッダの説明は 1分でわかる「X-ナントカ」HTTPレスポンスヘッダ - 葉っぱ日記 を読めばいいと思います。

素の ASP.NET はこういったヘッダを自動で出力してくれたりはしないので、Web.config にテンプレ的に書いていてもいいかもしれないですね。