抑制HTTP 500响应代码

时间:2010-02-10 07:47:22

标签: asp.net http iis

我从一些与返回HTTP 500响应代码的网站相关的威胁和漏洞人员收到了一些反馈。基本上建议是必须采取所有可能的措施来避免服务器抛出500(即广泛的表单输入验证),这很好。

但是,该建议还建议尝试通过将标记插入随机查询字符串以导致ASP.NET请求验证触发或操纵viewstate等方式来破坏安全性也不应返回HTTP 500.显然本机框架行为是解释请求并可能抛出自定义错误页面,但即使这将返回500响应代码。

所以我想了解如何处理这个问题。有没有办法在.NET级别或IIS级别配置应用程序,以便在引发500时返回HTTP 200?或者,这是否在其中一个应用程序事件中成为global.asax级别的编码练习?是否还有其他后果需要考虑?

顺便说一句,来自安全方面的理由是,返回HTTP 500的应用程序可能会被机器人随机扫描漏洞并提示进一步的恶意活动视为“低悬的果实”。尝试我个人并不相信更改响应代码可以提供任何真正的安全性增益,但我很乐意接受专业人士的建议。

3 个答案:

答案 0 :(得分:4)

为什么呢?在没有任何其他信息的情况下发回500代码并不会给攻击者提供太多信息。

如果您没有将堆栈跟踪,状态转储等返回给客户端,那么您就可以了。我非常怀疑你是否愿意这样做。

说真的,只需创建一个“500”页面(鲸鱼可选图片)并以状态500返回 - 它没有任何结果。

当页面未成功生成时发送200状态是完全错误的,可能会导致不良事件发生 - 例如机器人认为它是真正的页面。您不希望您的“500错误”页面显示在Google上,因为您发回了200状态。

答案 1 :(得分:4)

要回答您的问题global.asax是正确的位置,尤其是Application_Error事件处理程序。你应该可以做类似

的事情
Response.StatusCode = 200
Response.StatusDescription = "OK"

那里。

PS :不要这样做。 :-)对我来说,这听起来像是另一种违反安全标准的安全标准方法。我真的不认为(可能是边际的)安全性增加值得打破正确的HTTP行为(想想谷歌索引你的错误页面等)。

答案 2 :(得分:1)

您可以在配置中设置自定义错误页面 - 您可以在自定义错误页面中重新设置响应状态

<customErrors  mode="On" defaultRedirect="~/DefaultErrorPage.htm" >
  <error statusCode="500" redirect="~/CustomError.aspx"/>
</customErrors>

严重警告......!

确保您的自定义错误页面中没有任何错误。通常,您将使用html页面,而不是aspx页面 - 但如果您想更改响应标头,则可能需要使用aspx页面。除了更改标题(即不显示数据库中的任何数据或尝试运行任何逻辑)之外,不要在那里做任何其他事情,并且自定义错误页面上的错误将导致“最大重定向次数”错误。