web-dev-qa-db-ja.com

UrlScanを使用しないAzure / IIS7での過剰なHTTP応答ヘッダーの削除/非表示/無効化

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

Startup.cmdからインストーラーを展開する必要のない、Azureに適したソリューションが必要です。

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

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

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

80
Nick Evans

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

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

Serverを削除するには、Global.asaxに移動し、Application_PreSendRequestHeadersイベントと以下を追加( [〜#〜] bk [〜#〜] )および this blog this will 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でfind/create <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でfind/create <system.webServer>および追加:

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

    ...
135
Nick Evans

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

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

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

10
AKhooli

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

ここでデモします: http://www.nwebsec.com/HttpHeaders/VersionHeaders (Azure)

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

6
klings

ニック・エヴァンスの答えは完璧ですが、...

securityの目的でこれらのヘッダーを削除する場合は、ASP.NET Session coockie name!これを見ると、使用されている言語やサーバーのバージョンを推測するのが簡単だからです:

enter image description here

Cookie名を変更するには:(クリエイティブになる)

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

@ 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>
3