在共享服务器上的病毒攻击添加了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告诉我,自定义错误页面可以解决此问题并提供指向标题为410 a bunch of html pages in IIS的SO帖子的链接。
根据SO post说明,我在根文件夹中创建了一个自定义的410Error.aspx页面并在后面的代码中设置了Response.StatusCode = 410,我修改了web.config作为SO示例,如下所示:
<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仍在loccal macine和共享服务器上显示空白页面,IE11显示默认的410错误页面。似乎IIS无法找到Error410.aspx,所以我尝试使用几种不同的路径,包括没有运气的绝对路径。我错过了什么?