UrlScanを使用せずにAzure / IIS7で過剰なHTTP応答ヘッダーを削除/非表示/無効化する


86

余分なヘッダーを削除する必要があります(主に侵入テストに合格するため)。UrlScanの実行を伴うソリューションを検討することに時間を費やしましたが、Azureインスタンスを起動するたびにUrlScanをインストールする必要があるため、これらは面倒です。

startup.cmdからインストーラーをデプロイする必要のないAzure向けの優れたソリューションが必要です。

応答ヘッダーがさまざまな場所に追加されていることを理解しています

  • サーバー:IISによって追加されました。
  • X-AspNet-バージョン:HttpResponseクラスのフラッシュ時にSystem.Web.dllによって追加されました
  • X-AspNetMvc-バージョン:System.Web.dllのMvcHandlerによって追加されました。
  • X-Powered-By:IISによって追加されました

IISモジュールを作成したりインストーラーをデプロイしたりせずに、(web.configなどを介して)IIS7を構成してHTTP応答ヘッダーを削除/非表示/無効にしてasafaweb.comでの「過剰なヘッダー」警告を回避する方法はありますか?Azureインスタンスが起動するたびに実行されますか?

回答:


139

次の変更により、カスタムHttpModule記述せずに、AzureでこれらのHTTP応答ヘッダーを削除できます。

ネット上のほとんどの情報は古く、UrlScanが関係していRemoveServerHeader=1ます(IIS7に統合されていますが、オプションは削除されています)。以下は私が見つけた最も近い解決策です(このブログこの回答、そしてこのブログを組み合わせたおかげで)。

サーバーを削除するには、Global.asaxに移動し、Application_PreSendRequestHeadersイベントを検索/作成して、以下を追加します(BKこのブログのおかげで、カッシーニ/ローカル開発でも失敗しません)。

2014年4月編集:ネイティブIISモジュールでPreSendRequestHeadersイベントとPreSendRequestContextイベントを使用できますが、IHttpModuleを実装するマネージモジュールでは使用しないでください。これらのプロパティを設定すると、非同期リクエストで問題が発生する可能性があります。正しいバージョンは、BeginRequestイベントを使用することです。

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var application = sender as HttpApplication;
        if (application != null && application.Context != null)
        {
            application.Context.Response.Headers.Remove("Server");
        }
    }

X-AspNet-Versionを削除するには、web.configで次を検索/作成<system.web>して追加します。

  <system.web>
    <httpRuntime enableVersionHeader="false" />

    ...

X-AspNetMvc-Versionを削除するには、Global.asaxに移動し、Application_Startイベントを検索/作成して、次のように行を追加します。

  protected void Application_Start()
  {
      MvcHandler.DisableMvcResponseHeader = true;
  }

X-Powered-Byを削除するには、web.configで次を検索/作成<system.webServer>して追加します。

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>

    ...

VSのヒントによると、Request、Response、またはResponse.Headersをnullチェックする必要はありません
Chris Haines 2013年

1
AzureではなくIISで使用する場合、アプリケーションプールは統合モードである必要があることに注意してください。また、ローカルでデバッグする場合は、.IsLocalを削除する必要があります。
ivanH 2013

5
C#では「ヨーダ
記法

1
詳細な回答をありがとうございますが、手順を実行してみましたが、asafwebを使用してサイトをスキャンするたびに、過剰なヘッダー(X-AspNet-Version)に関する問題が表示されます。URLRewriteを使用してこのヘッダーを削除しました。彼らはそれを取り除く他の可能性はありますか?
レイモンドA

4
yoursite / foo.jpg」など、存在しないファイルをリクエストするという問題はまだあります。この要求はMVCによって処理されないため、応答ヘッダー「サーバー:IISxy」は引き続き存在します。Azure Webサイトで機能する(そして明らかに紺碧のWebサイトでのみ)解決策の1つは、これを<system.webServer>の下に追加することです。<security xdt:Transform = "Insert"> <requestFiltering removeServerHeader = "true" /> </ security >
エイドリアンh。

12

MSDNは、AzureWebサイトでヘッダーを非表示にする方法に関するこの記事を公開しました。system.webServerにエントリを追加することで、web.configからサーバーを非表示にできるようになりました。

<security>
      <requestFiltering removeServerHeader ="true" />
</security>

ただし、VSは上記で無効として眉をひそめます。上記のリンクには写真としてのコードがあり、見つけるのは難しいです。MVCバージョンは、x-powered-byバージョンと.Netバージョンの場合と同じように、上記のようにアプリケーションの起動時に非表示のままです。


3
これはまさに私が探していたものです。ありがとうございました。
マーティンコステロ

3
これはAzureで機能する可能性がありますが、他の場所では機能しません。その記事へのコメントは、私自身のテストと同様に、これを裏付けています。@ giveme5minutesによる答えは、その仕組みです。
CrazyPyro 2015年

この関数を作成するために何が実装されたかを知っておくと便利です:| 特にURLSCANは以前にこれをすぐに実装していたので。
felickz 2015年

6

NuGetには、数行の構成でコードを変更せずにこれを実現するのに役立つパッケージNWebsecもあります。バージョンヘッダーの削除に関するドキュメントは、https//github.com/NWebsec/NWebsec/wiki/Suppressing-version-headersにあります。

ここでデモが行われます:http//www.nwebsec.com/HttpHeaders/VersionHeaders(Azureの場合)

免責事項:私はプロジェクトの開発者です。


「NWebsecは、これらのバージョンヘッダーのほぼすべて、つまりサーバー:Microsoft-IIS /8.0ヘッダーを除くすべてを抑制するのに役立ちます。」:( github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers
felickz

codeplexからGitHubに移動しました(リンクgithub.com/NWebsec/NWebsec/wikiを更新してください)
Nordes 2015

6

Nick Evansの答えは完璧ですが、...

セキュリティ上の理由でこれらのヘッダーを削除する場合は、ASP.NET Session coockie name!を変更することを忘れないでください。これを見ると、使用されている言語やサーバーのバージョンを推測しやすいためです。

ここに画像の説明を入力してください

クッキー名を変更するには:(創造的である)

<system.web>
  <sessionState cookieName="PHPSESSID" />
</system.web>

クッキー名を変更するだけでサーバ技術の露出よりも多くの利点を持っている-例えば、一般的な、バルクセッション収穫のリスク軽減
mlhDev

4

@ giveme5minutesと@AKhooliからの以前の回答を、Azure Webサイトに関連するものに加えて、スキャナーが見たい他のいくつかの項目にまとめます。これらは、ASafaWebをAzureサイトで満足させるために行った変更です。

それでも、AzureアフィニティヘッダーCookieがhttpsのみではないことについて不平を言いますが、アフィニティはとにかく再生したいCookieのタイプですよね?

<system.web>
    <compilation debug="false">
    <httpRuntime enableVersionHeader="false" />
    <httpCookies httpOnlyCookies="true" requireSSL="true" />    
    <customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx" />
</system.web>

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="DENY" />
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
    <security>
      <!--removes Azure headers-->
      <requestFiltering removeServerHeader="true" />
    </security>
</system.webServer>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.