1

共有サーバーへのウイルス攻撃により、クライアントの 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 を見つけることができなかったようです。そのため、絶対パスを含むいくつかの異なるパスを使用してみましたが、うまくいきませんでした。私は何が欠けていますか?

4

0 に答える 0