私が使用しているMVCアプリケーションの各ページは、応答に次のHTTPヘッダーを設定します。
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
これらが表示されないようにするにはどうすればよいですか?
私が使用しているMVCアプリケーションの各ページは、応答に次のHTTPヘッダーを設定します。
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
これらが表示されないようにするにはどうすればよいですか?
回答:
X-Powered-By
IISのカスタムヘッダーです。IIS 7以降、次のものをに追加することで削除できますweb.config
。
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
このヘッダーは、必要に応じて変更することもできます。詳細については、http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeadersを参照してください。
これを追加しweb.config
てX-AspNet-Version
ヘッダーを取り除きます:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
最後に、を削除するX-AspNetMvc-Version
にGlobal.asax.cs
は、Application_Start
イベントで以下を編集して追加します。
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
のApplication_PreSendRequestHeaders
イベントを使用して、実行時にヘッダーを変更することもできますGlobal.asax.cs
。これは、ヘッダー値が動的な場合に役立ちます。
protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
Response.Headers.Remove("foo");
Response.Headers.Add("bar", "quux");
}
X-Powered-By
ヘッダーは削除されません。これを達成する方法については、他の回答を参照してくださいweb.config
。
global.asaxファイルにコードを追加して削除することもできます。
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("X-Powered-By");
HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
HttpContext.Current.Response.Headers.Remove("Server");
}
<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> <redirectHeaders> <clear /> </redirectHeaders> </httpProtocol> </system.webServer>
私は私の中でこの設定を見つけweb.config
ただったためNew Web Site...
(とは対照的に、Visual Studioで作成したNew Project...
)を。質問はASP.NET MVCアプリケーションについて述べているので、それほど関連性はありませんが、それでもオプションです。
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
更新:また、Troy HuntにはShhhというタイトルの記事があります。これらのヘッダーを削除する詳細な手順と、それらをスキャンするためのASafaWebツールへのリンクおよびその他のセキュリティ構成を使用して、応答ヘッダーを大声で話させないでください。
code
<security> <requestFiltering> <verbs> <add verb = "OPTIONS" allowed = "false" /> </ verbs> </ requestFiltering> </ security>code
.NET Core
Serverヘッダーを削除するには、Program.csファイル内に次のオプションを追加します。
.UseKestrel(opt => opt.AddServerHeader = false)
ドットネットコア1の場合、.UseKestrel()呼び出し内にオプションを追加します。ドットネットコア2の場合、UseStartup()の後に行を追加します。
X-Powered-Byヘッダーを削除するには、IISにデプロイされている場合、web.configを編集し、system.webServerタグ内に次のセクションを追加します。
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
.NET 4.5.2
Serverヘッダーを削除するには、global.asaxファイル内に次を追加します。
protected void Application_BeginRequest(object sender, EventArgs e)
{
string[] headers = { "Server", "X-AspNet-Version" };
if (!Response.HeadersWritten)
{
Response.AddOnSendingHeaders((c) =>
{
if (c != null && c.Response != null && c.Response.Headers != null)
{
foreach (string header in headers)
{
if (c.Response.Headers[header] != null)
{
c.Response.Headers.Remove(header);
}
}
}
});
}
}
.NET 4.5.2より前
次のc#クラスをプロジェクトに追加します。
public class RemoveServerHeaderModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
}
public void Dispose() { }
void OnPreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("Server");
}
}
次に、web.config内に次の<modules>セクションを追加します。
<system.webServer>
....
<modules>
<add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
</modules>
しかし、サブプロジェクトがこのモジュールを見つけられないという問題がありました。楽しくない。
'' X-AspNetMvc-Version ''タグを削除するには、任意のバージョンの.NETについて、 '' web.config ''ファイルを次のように変更します。
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
これを信じられないほど困難にしてくれたマイクロソフトに感謝します。あるいは、世界中のIISおよびMVCのインストールを追跡できるように、それがあなたの意図だったのかもしれません...
RemoveServerHeaderModule
WEBAPIプロジェクトで働くつもりはありません。
IIS 7でのASP.NET MVC Webアプリケーションのクローキングで説明されているように、web.configに次の構成セクションを適用することにより、X-AspNet-Versionヘッダーをオフにすることができます。
<system.web>
<httpRuntime enableVersionHeader="false"/>
</system.web>
次のようにGlobal.asax.csを変更して、X-AspNetMvc-Versionヘッダーを削除します。
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
カスタムヘッダーで説明されているように、次の構成セクションをweb.configに適用することで、「X-Powered-By」ヘッダーを削除できます。
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
</system.webServer>
IIS 7でのASP.NET MVC Webアプリケーションのクローキングとhow-to-remove-server-でHttpModule
説明されているように、特定のHTTPヘッダーを削除するように実装して、「サーバー」応答ヘッダーを削除する簡単な方法はありませんが、 x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-from-the-response-header-in-iis7。
Windows Azure Webサイトページでの標準サーバーヘッダーの削除に示すように、次のようにしてヘッダーを削除できます。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
<security>
<requestFiltering removeServerHeader="true"/>
</security>
</system.webServer>
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
</configuration>
これにより、ServerヘッダーとX-ヘッダーが削除されます。
これはVisual Studio 2015のテストでローカルに機能しました。
このブログを確認してください ヘッダーを削除するためにコードを使用しないでください。マイクロソフトによると不安定
これについての私の見解:
<system.webServer>
<httpProtocol>
<!-- Security Hardening of HTTP response headers -->
<customHeaders>
<!--Sending the new X-Content-Type-Options response header with the value 'nosniff' will prevent
Internet Explorer from MIME-sniffing a response away from the declared content-type. -->
<add name="X-Content-Type-Options" value="nosniff" />
<!-- X-Frame-Options tells the browser whether you want to allow your site to be framed or not.
By preventing a browser from framing your site you can defend against attacks like clickjacking.
Recommended value "x-frame-options: SAMEORIGIN" -->
<add name="X-Frame-Options" value="SAMEORIGIN" />
<!-- Setting X-Permitted-Cross-Domain-Policies header to “master-only” will instruct Flash and PDF files that
they should only read the master crossdomain.xml file from the root of the website.
https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
<add name="X-Permitted-Cross-Domain-Policies" value="master-only" />
<!-- X-XSS-Protection sets the configuration for the cross-site scripting filter built into most browsers.
Recommended value "X-XSS-Protection: 1; mode=block". -->
<add name="X-Xss-Protection" value="1; mode=block" />
<!-- Referrer-Policy allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites.
If you have sensitive information in your URLs, you don't want to forward to other domains
https://scotthelme.co.uk/a-new-security-header-referrer-policy/ -->
<add name="Referrer-Policy" value="no-referrer-when-downgrade" />
<!-- Remove x-powered-by in the response header, required by OWASP A5:2017 - Do not disclose web server configuration -->
<remove name="X-Powered-By" />
<!-- Ensure the cache-control is public, some browser won't set expiration without that -->
<add name="Cache-Control" value="public" />
</customHeaders>
</httpProtocol>
<!-- Prerequisite for the <rewrite> section
Install the URL Rewrite Module on the Web Server https://www.iis.net/downloads/microsoft/url-rewrite -->
<rewrite>
<!-- Remove Server response headers (OWASP Security Measure) -->
<outboundRules rewriteBeforeCache="true">
<rule name="Remove Server header">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<!-- Use custom value for the Server info -->
<action type="Rewrite" value="Your Custom Value Here." />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
完全を期すためにServer
、regeditを使用してヘッダーを削除する別の方法があります。
次のレジストリキーにDisableServerHeaderというDWORDエントリを作成し、値を1に設定します。
HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parameters
Web.configを使用して適切な解決策を見つけたいのです<rewrite>
が、書き換えモジュールをインストールする必要があり、ヘッダーを実際には削除せず、空にするだけなので、使用するのはよくありません。
あなたはApplication_EndRequest()
これを試して任意のヘッダーまたは何かを変更することができます
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
X-Powered-ByヘッダーはIISによってHTTP応答に追加されるため、サーバーレベルでもIISマネージャーを介してヘッダーを削除できます。
web.configを直接使用できます。
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>