我尝试了这个:
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/Home/ErrorPage" />
然而,http://www.example.com/PageThatDoesNotExist 仍会返回标准的404错误页面。
编辑:我看到Scott Gu在他的博客文章评论中提到MVC是有漏洞的,但我仍不清楚如何实现解决方法。
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/Home/ErrorPage" />
在您的默认路由下,您可以/应该首先添加此内容
routes.MapRoute("Catch All", "{*path}", new { controller = "Home", action = "ErrorPage" });
编辑2
问题出在redirectMode="ResponseRewrite"
这一部分,没有它,就可以正常工作。
使用路由可以解决其中的一部分问题,即找不到路径(404)的问题。
下一部分,例如存在错误ID或其他数据的现有路径,可以通过以下方式进行修复:
<customErrors mode="On" defaultRedirect="/Home/ErrorPage" />
redirectMode="ResponseRewrite"
是什么意思?
编辑:它的作用是什么。
redirectMode
这只适用于.NET 3.5 SP1和.NET 4.0。
编辑101:
对于redirectMode="ResponseRewrite"
,ASP.NET在内部调用Server.Execute(...),但这不适用于MVC路由,所以对于MVC,它只能与静态HTML文件一起使用。
<customErrors mode="On" defaultRedirect="~/Views/Shared/error.htm" redirectMode="ResponseRewrite" />
工作。
defaultRedirect
属性末尾有.aspx
,而在.NET MVC中并不需要。 - Dan Atkinson我在我的博客上发表了我对此问题的全部看法(经过额外的研究)。
更新说明:将链接移动到特定于asp.net MVC的帖子
我强烈认为404错误的问题与WebResources和ScriptResources有关(在asp.net MVC中可以禁用它们),因为当相应的资源未找到时,这些资源可能会给出404错误(这将是给出无效资源路径/名称的有效填充的正常响应)。
其他错误代码和消息可能是其他asp.net功能的问题,但只有因为您点击与任何特殊处理程序无关的URL而以404结尾的问题不应该引起问题。
还请注意我在此答案中提到的内容: How serious is this new ASP.NET security vulnerability and how can I workaround it?
如果应用程序是asp.net MVC,我们实际上不需要webresources.axd和/或scriptresources.axd,因此可以将其关闭。我们也不使用视图状态。
asp.net成员资格提供程序在cookie中“缓存”角色,关闭该功能。
授权cookie已签名,根据论文中的信息,如果他们不能获得实际密钥(如在伪造授权cookie之前所做的那样),则不应该能够生成签名cookie。
正如Aristos所提到的,在cookie中的会话ID对于用户会话是随机的,因此必须从具有目标安全级别的用户中嗅探并在该会话处于活动状态时破解。即使这样,如果您依赖认证来分配/授权用户操作,则影响将是最小的/它将在很大程度上取决于该应用程序中使用Session的方式。
http://weblogs.asp.net/scottgu/archive/2010/09/30/asp-net-security-fix-now-on-windows-update.aspx
/Home/ErrorPage
路由?http://www.example.com/Home/ErrorPage
,但是该页面并未从customErrors中调用。 - royco