代码之家  ›  专栏  ›  技术社区  ›  Troy Hunt

抑制HTTP 500响应代码

  •  2
  • Troy Hunt  · 技术社区  · 14 年前

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

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

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

    顺便说一句,安全方面的理由是,机器人随机扫描漏洞并提示进一步的恶意活动,可以将返回HTTP 500的应用程序视为低挂水果。我个人并不相信更改响应代码会带来真正的安全收益,但我很乐意接受专业人士的建议。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Heinzi    14 年前

    回答你的问题 : global.asax 是正确的地方,尤其是 Application_Error 事件处理程序。你应该能做点什么

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

    那里。

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

        2
  •  4
  •   MarkR    14 年前

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

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

    说真的,只需创建一个“500”页面(可选的鲸鱼图片),并将其与状态500一起返回-它什么也不提供。

    在页面未成功生成时发送200状态显然是错误的,可能会导致发生错误的事情,例如认为它是真正的页面的机器人程序。你不希望你的“500错误”页面出现在谷歌上,因为你发送了一个200状态。

        3
  •  1
  •   Fenton    14 年前

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

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

    严重警告…!

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