IIS7 から "Server" 応答ヘッダーを削除する方法はありますか? HttpModules を使用して同じことを達成できることを示す記事がいくつかあります。これは、サーバーに対する管理者権限がない場合に役立ちます。また、ISAPI フィルターを書きたくありません。
サーバーに対する管理者権限があります。だから私は上記のことをしたくありません。だから、私が同じことをするのを手伝ってください。
これを global.asax.cs に追加します。
protected void Application_PreSendRequestHeaders()
{
Response.Headers.Remove("Server");
Response.Headers.Remove("X-AspNet-Version");
Response.Headers.Remove("X-AspNetMvc-Version");
}
IIS7では、HTTPモジュールを使用する必要があります。VSでクラスライブラリとして以下をビルドします。
namespace StrongNamespace.HttpModules
{
public class CustomHeaderModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
}
public void Dispose() { }
void OnPreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Set("Server", "Box of Bolts");
}
}
}
次に、以下をweb.configに追加するか、IIS内で構成します(IIS内で構成する場合、アセンブリはGAC内にある必要があります)。
<configuration>
<system.webServer>
<modules>
<add name="CustomHeaderModule"
type="StrongNamespace.HttpModules.CustomHeaderModule" />
</modules>
</system.webServer>
</configuration>
IIS 用の URL Rewrite モジュール バージョン 2.0 (UrlRewrite) を有効にして、構成セクション<configuration>
➡ <system.webServer>
➡<rewrite>
アウトバウンド ルールを追加します。
<outboundRules>
<rule name="Remove RESPONSE_Server" >
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
実際には、上記のコード化されたモジュールと Global.asax の例は、有効な要求に対してのみ機能します。
たとえば、URL の末尾に < を追加すると、サーバー ヘッダーを公開する「Bad request」ページが表示されます。多くの開発者はこれを見落としています。
表示されているレジストリ設定も機能しません。URLScan は、「サーバー」ヘッダーを削除する唯一の方法です (少なくとも IIS 7.5 では)。
または、web.config に追加します。
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-AspNet-Version" />
<remove name="X-AspNetMvc-Version" />
<remove name="X-Powered-By" />
<!-- <remove name="Server" /> this one doesn't work -->
</customHeaders>
</httpProtocol>
</system.webServer>
URL Rewrite answerへの追加、ここに完全な XML がありますweb.config
<system.webServer>
<rewrite>
<outboundRules>
<rule name="Remove RESPONSE_Server" >
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="Company name" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
Server:
ヘッダーを削除するには、に移動しGlobal.asax
、イベントを見つけて作成し、次のように行を追加します ( BKとこのブログApplication_PreSendRequestHeaders
のおかげで、これは Cassini / ローカル dev でも失敗しません)。
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
// Remove the "Server" HTTP Header from response
HttpApplication app = sender as HttpApplication;
if (null != app && null != app.Request && !app.Request.IsLocal &&
null != app.Context && null != app.Context.Response)
{
NameValueCollection headers = app.Context.Response.Headers;
if (null != headers)
{
headers.Remove("Server");
}
}
}
Azure/IIS7 で関連するすべてのヘッダーを削除し、Cassini でも動作する完全なソリューションが必要な場合は、このリンクを参照してください。これは、HttpModules または URLScan を使用せずにこれらのヘッダーを無効にする最良の方法を示しています。
ヘッダーを削除したいだけの場合は、ルキファーの回答の短縮版を使用できます。
using System.Web;
namespace Site
{
public sealed class HideServerHeaderModule : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders +=
(sender, e) => HttpContext.Current.Response.Headers.Remove("Server");
}
}
}
そして、でWeb.config
:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="CustomHeaderModule" type="Site.HideServerHeaderModule" />
</modules>
</system.webServer>
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader
レジストリ エントリを の にREG_DWORD
設定してみてください1
。
UrlScanAlternateServerName=
は、以下を使用してサーバー ヘッダーを削除することもできます[options]
。
URLScan のバージョンによっては、eddiegroves の回答をフォローアップすると、代わりRemoveServerHeader=1
に[options]
.
このオプションが追加された URLScan のバージョンはわかりませんが、バージョン 2.5 以降で使用できます。
以下のコードを Global.asax.cs ファイルに追加できます
protected void Application_PreSendRequestHeaders()
{
Response.Headers.Remove("Server");
}
私はこれを調査しましたが、URLRewrite メソッドはうまく機能します。どこにもうまくスクリプト化された変更が見つからないようです。これは PowerShell v2 以降と互換性があるように記述し、IIS 7.5 でテストしました。
# Add Allowed Server Variable
Add-WebConfiguration /system.webServer/rewrite/allowedServerVariables -atIndex 0 -value @{name="RESPONSE_SERVER"}
# Rule Name
$ruleName = "Remove Server Response Header"
# Add outbound IIS Rewrite Rule
Add-WebConfigurationProperty -pspath "iis:\" -filter "system.webServer/rewrite/outboundrules" -name "." -value @{name=$ruleName; stopProcessing='False'}
#Set Properties of newly created outbound rule
Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "serverVariable" -value "RESPONSE_SERVER"
Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "pattern" -value ".*"
Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/action" -name "type" -value "Rewrite"
ここにあるすべてのものと、他のいくつかの同様のスタックオーバーフロースレッドで試しました。
設定を変更した後、ブラウザのキャッシュをクリアするのを忘れたため、少し電話が切れました。これを行わず、ファイルがローカル キャッシュにある場合は、元のヘッダーで返されます (当然)。
runAllManagedModulesForAllRequestsを削除することで、ほとんど機能するようになりました。
<modules runAllManagedModulesForAllRequests="true">
これにより、ほとんどの静的ファイルから余分なヘッダーが削除されましたが、WebAPI プロジェクトの一部の静的ファイルで "サーバー" ヘッダーを取得していました。
最終的にこのソリューションを見つけて適用したところ、不要なヘッダーがすべてなくなりました。
https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85
ここにある彼のコードについて説明します:
https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5
これはネイティブ コード モジュールです。値を空白にするだけでなく、サーバー ヘッダーを削除することもできます。デフォルトでは、次のものを削除します。