プチラヴォス

IISにおけるServer(Response Header)項目の非公開化

概要

IIS(Webサーバー)のServerヘッダーの非公開化設定の備忘

背景

Webサーバーへアクセスした際にクライアントに返されるHttpレスポンスにはServerヘッダー項目が存在し、下記情報が格納されます。

格納情報

  • 利用Webサーバー
  • バージョン

参考.

developer.mozilla.org

デフォルトでは格納設定であり、セキュリティ観点でServerヘッダー情報の外部公開はWebサーバーの脆弱性となる為に運用時には非公開設定にするのが推奨されます。

Server以外のヘッダー項目(X-AspNet-Version・X-AspNetMvc-Version・X-Powered-By等)にも
FW及びバージョン情報が格納され、同様に非公開設定を行うのが推奨されています。
今回はServerヘッダーのみ触れて割愛します。

非公開設定方法

設定方法はIISマネージャーもしくは、ホストしているweb.configの設定編集ですが後者について記載します。
必要設定はIISバージョンによって異なります

IISバージョン

  • 10.0以降(10.0で動作確認済)
  • 10.0未満(8.0/8.5で動作確認済)

IIS10.0以降の設定
IIS10.0から追加された removeServerHeader を指定します。

web.config

<system.webServer>
    <security>
        <requestFiltering removeServerHeader="true">
        </requestFiltering>
    </security>
</system.webServer>

参考

Request Filtering <requestFiltering> | Microsoft Learn

Request Filtering <requestFiltering> | Microsoft Learn

IIS10.0未満の設定
調査してみたのですが、非公開化方法は見つかりませんでした
代案としてServerヘッダーの項目を文字列(空文字列等)を指定して上書きする事で本来の情報を隠蔽します。

web.config

<system.webServer>
    <rewrite>
        <outboundRules>
        <rule name="{送信規則名-例:replace server header}">
            <match serverVariable="RESPONSE_SERVER" pattern=".*" />
            <action type="Rewrite" value="{Severヘッダーの内容指定-例:""}" />
        </rule>
        </outboundRules>
    </rewrite>
</system.webServer>

参考

stackoverflow.com

検証

ここではIIS10.0の環境での検証手順を記します。

1.web.config編集による追記

2.デバッグ実行してServerヘッダー確認

背景段落で出力されていたServerヘッダーが返っていないのが確認出来ました。