【问题标题】:Suppressing HTTP 500 response codes抑制 HTTP 500 响应代码
【发布时间】:2010-02-10 07:47:21
【问题描述】:

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

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

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

顺便说一句,安全方面的基本原理是,返回 HTTP 500 的应用程序可能会被机器人随机扫描漏洞并引发进一步的恶意活动视为“唾手可得的果实”。尝试 我个人不相信更改响应代码会带来任何真正的安全收益,但我很乐意听取专业人士的建议。

【问题讨论】:

  • 从不抛出 500 错误代码如何让您更安全?对我来说听起来不对,除非您在错误页面中粘贴调试信息。
  • 我说的是带有自定义错误且没有调试或跟踪数据出现的应用程序。正如我在上面所说的,它的立场并不是让应用程序更安全,而是让它作为入侵尝试的潜在候选者变得不那么明显。
  • 除了错误页面(url 模式、表单字段名称、HTML 样式、自定义 HTTP 标头...)之外,您正在使用的应用程序还有很多其他提示,所以我不知道有多少抑制应用程序的自定义错误页面的真正安全价值是。即使您确实隐藏了您正在使用的应用程序,它也只是混淆了。当然不应该采取“所有可能的措施”,当然也不应该对客户撒谎说有错误。 MarkR 有最好的答案,创建一个通用的、静态的、站点范围的 500 错误页面,比如 Twitter 的失败鲸鱼或 Github 的愤怒独角兽。

标签: asp.net http iis


【解决方案1】:

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

Response.StatusCode = 200
Response.StatusDescription = "OK"

那里。

PS:别这样。 :-) 对我来说,这听起来像是另一种违反标准的安全方法。我真的认为(可能微不足道的)安全性提高不值得打破正确的 HTTP 行为(想想 Google 将您的错误页面编入索引等)。

【讨论】:

  • 我已将此标记为正确答案,因为尽管我同意其他回答认为这是不应该做的事情,但 Heinzi 是唯一真正回答了原始问题的人。
【解决方案2】:

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

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

说真的,只需创建一个“500”页面(可选的鲸鱼图片)并将其返回为您的状态 500 - 它不会泄露任何信息。

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

【讨论】:

  • 谢谢马克,正如我所说,我也有同样的担忧,可能会尝试协商解决,但现阶段我只需要实际的实现方法。
【解决方案3】:

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

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

严重警告...!

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

【讨论】:

  • 感谢 Sohnee,但您的示例仅根据 HTTP 状态定义要路由到哪个错误页面。它实际上并没有以任何方式更改代码。
猜你喜欢
  • 2015-10-30
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 2020-11-12
  • 1970-01-01
  • 2017-12-06
相关资源
最近更新 更多