【问题标题】:ASP.NET customErrors web.config not catching all invalid URLsASP.NET customErrors web.config 未捕获所有无效 URL
【发布时间】:2013-12-21 10:08:58
【问题描述】:

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

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

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

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

但是当 URL 中使用“&”时它不起作用并且没有“?” 有一个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>"").

【问题讨论】:

  • HTH! stackoverflow.com/questions/10837647/… stackoverflow.com/questions/9498180/… 你需要记住的是,这个异常是在页面代码发生之前抛出的。因此,您通常无法在页面代码中捕获错误,而只能在 Application_Error 中捕获错误。
  • 我目前没有在代码级别做任何事情,但感谢您提供的链接。我只是使用 web.config customerrors 标签将错误重定向到特定页面。从我读过的内容来看,这应该是有效的。事实上,据我所知,它确实有效,除了我给出的非常具体的例子。我只需要找出为什么它不适用于这种情况
  • 如果您使用的是 IIS7+,这里有一个更简单的解决方案:- stackoverflow.com/questions/30071341/…

标签: asp.net web-config custom-error-pages


【解决方案1】:

由于您在 URL 中传递 HTML 标记,这可能表示跨站点脚本攻击。并非所有的 HTML 标记都是危险的,但是当 HTML 字符后跟某些字符时,例如 '&' 在您的情况下,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" />

【讨论】:

  • 有潜在的黑客和客户试图发布无效的 URL,我需要确保将它们发送到相同的错误页面以获得一致的外观和感觉。我不想关闭验证。我只想在这些请求发生时将它们发送到我的错误页面。
  • 是的,如果您禁用验证,您需要在页面中验证请求,如果它是无效请求,您可以将其重定向到错误页面。看到这个链接stackoverflow.com/questions/20009815/…
  • 将 requestValidationMode="2.0" 添加到 httpRuntime 标签可以正确处理我提到的 URL。所以感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2011-09-27
  • 2011-06-11
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 2013-07-12
相关资源
最近更新 更多