【发布时间】: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 的愤怒独角兽。