共有サーバーへのウイルス攻撃により、クライアントの Web サイトに 180 個のリンクが追加され、それらを手動で削除するのに何時間も費やした後、一般化された 410 ハンドラーを含めることで、同様の将来の攻撃を阻止したいと考えています。まず、global.asax.cs を変更して、クエリ文字列が存在するたびに 410 エラーを発行することから始めました。このアプリケーションではクエリ文字列が使用されていないためです。
protected void Application_BeginRequest(object sender, EventArgs e)
{
string queryParms = Request.Url.Query;
if (queryParms.Length > 0)
{
Response.StatusCode = 410;
Response.End();
}
}
これは、ローカル テスト マシンの IE11 と Chrome、および共有サーバーの IE11 で正常に機能しました (既定のエラー ページが表示されました)。しかしChromeは空白のページを表示しました。
私の ISP は、カスタム エラー ページがこの問題を解決することを知らせ、IIS で 410 というタイトルの SO 投稿へのリンクを提供しました。
SO 投稿の指示に従って、ルート フォルダーにカスタム 410Error.aspx ページを作成し、コード ビハインドで Response.StatusCode = 410 を設定し、次のように SO の例として web.config を変更しました。
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
<remove statusCode="410" subStatusCode="-1" />
<error statusCode="410" path="/Error410.aspx" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
また、カスタム エラーを true に設定します。
<system.web>
<customErrors mode="On" />
<compilation debug="true" targetFramework="4.0"/>
...
</system.web>
残念ながら、Chrome は依然としてローカル マシンと共有サーバーに空白のページを表示し、IE11 はデフォルトの 410 エラー ページを表示しました。IIS が Error410.aspx を見つけることができなかったようです。そのため、絶対パスを含むいくつかの異なるパスを使用してみましたが、うまくいきませんでした。私は何が欠けていますか?