87

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

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

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

  • サーバー: IIS によって追加されました。
  • X-AspNet-Version : HttpResponse クラスの Flush 時に System.Web.dll によって追加される
  • X-AspNetMvc-Version : MvcHandler によって System.Web.dll に追加されました。
  • X-Powered-By : IIS によって追加されました

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

4

5 に答える 5

139

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

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

Serverを削除するには、Global.asax に移動し、イベントを検索/作成して、以下を追加します ( BKこのブログApplication_PreSendRequestHeadersのおかげで、これは Cassini / local dev でも失敗しません)。

2014 年 4 月編集: PreSendRequestHeaders イベントと PreSendRequestContext イベントはネイティブ IIS モジュールで使用できますが、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>

    ...
于 2012-10-09T16:01:42.830 に答える
12

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

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

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

于 2014-01-11T16:39:25.993 に答える
6

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

ここでデモされています: http://www.nwebsec.com/HttpHeaders/VersionHeaders (Azure)

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

于 2012-10-09T19:29:14.517 に答える
4

Azure Web サイトに関連する @giveme5minutes と @AKhooli からの以前の回答と、スキャナーが見たい他のいくつかの項目をまとめると、これらは 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>
于 2016-01-24T04:07:54.370 に答える