ASP.NET customErrors web.config未捕获所有无效URL

ASP.NET customErrors web.config未捕获所有无效URL,asp.net,web-config,custom-error-pages,Asp.net,Web Config,Custom Error Pages,web.config中的customErrors默认重定向中似乎存在错误。在我的web.config文件中,我有以下customErrors设置 <customErrors defaultRedirect="~/generalerror.html?" mode="On" /> 据我所知,这会将所有错误发送到自定义generalerror.html页面。它似乎适用于一些无效的URL,如 http://website.com/?x="<p>" http://websit

web.config中的customErrors默认重定向中似乎存在错误。在我的web.config文件中,我有以下customErrors设置

<customErrors defaultRedirect="~/generalerror.html?" mode="On" />

据我所知,这会将所有错误发送到自定义generalerror.html页面。它似乎适用于一些无效的URL,如

http://website.com/?x="<p>"
http://website.com/"<p>"
http://website.com/?x=“”
http://website.com/“”
但当URL中使用“&”且没有“?”且有HTML标记时,它不起作用。那么这个

http://website.com/&x="<p>"
http://website.com/&x=“”
完全忽略customErrors,并为您提供默认的黄色运行时错误,而不是发送到custom generalerror.html页面。如何使此URL也重定向到自定义错误页

如果在web.config中关闭mode=“Off”,则会出现以下错误

A potentially dangerous Request.RawUrl value was detected from the client (="/&x="<p>"").
从客户端(“/&x=“”)检测到潜在危险的Request.RawUrl值。

由于您在URL中传递HTML标记,这可能表示跨站点脚本攻击。并非所有HTML标记都是危险的,但在您的案例中,当HTML字符后跟某些字符(如“&”)时,asp.net将其视为跨站点脚本攻击,默认情况下不允许这种攻击

<>你应该考虑对URL进行编码来绕过这个问题。这始终是一种最佳实践。这是关于XSS的一个很好的解释。这是一个详细解释如何绕过这个问题的链接

要更改此行为,可以在web.config中将请求验证设置为false

<configuration>
<system.web>
    <pages validateRequest="false" />
</system.web>
</configuration>

但在这种情况下,需要在页面中验证请求

在.NET 4.0中对ASP.NET请求验证进行了中断更改,需要此条目才能将行为还原到.NET 2.0,在该版本中,无效URL将重定向到自定义错误页

<httpRuntime requestValidationMode="2.0" />


HTH!您需要记住的是,此异常是在页面代码发生之前引发的。因此,您通常无法捕获页面代码中的错误,而只能捕获应用程序中的错误。我目前没有在代码级别执行任何操作,但感谢您提供的链接。我只是使用web.config customerrors标记将错误重定向到特定页面。这应该是从我读到的工作。事实上,就我所知,它确实有效,除了我给出的非常具体的例子。我只需要找出为什么它不适用于这种情况如果你使用IIS7+这里有一个更简单的解决方案:-有潜在的黑客和客户端试图发布无效的URL,我需要确保将它们发送到相同的错误页面以获得一致的外观和感觉。我不想关闭验证。我只想在这些请求发生时将其发送到我的错误页面。是的,如果禁用验证,则需要在页面中验证该请求,如果该请求无效,则可以将其重定向到错误页面。请参阅此链接,将requestValidationMode=“2.0”添加到httpRuntime标记可以正确处理我提到的URL。所以谢谢你的帮助