在共享服务器上的病毒攻击添加了 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一堆 IIS 中的 html 页面的 SO 帖子。
根据 SO 发布说明,我在根文件夹中创建了一个自定义 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 在本地机和共享服务器上仍然显示空白页面,IE11 显示默认的 410 错误页面。IIS似乎找不到Error410.aspx,所以我尝试使用几种不同的路径,包括没有运气的绝对路径。我错过了什么?