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

时间:2013-12-04 18:56:27

标签: 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://website.com/"<p>"

但是当在网址中使用“&amp;”并且没有“?”时,它不起作用有一个HTML标记。所以这个

http://website.com/&x="<p>"

完全忽略customErrors,您将获得默认的黄色运行时错误,而不是被发送到自定义generalerror.html页面。如何将此URL也重定向到自定义错误页面?

如果我在web.config中关闭mode =“Off”,我会收到以下错误

A potentially dangerous Request.RawUrl value was detected from the client (="/&x="<p>"").

1 个答案:

答案 0 :(得分:0)

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

您应该考虑对URL进行编码以解决此问题。它始终是最佳实践。 Here是关于XSS的一个很好的解释。 here是一个链接,详细解释了如何解决此问题。

要更改此行为,您可以在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" />