【问题标题】:What is the most appropriate HTTP Status Code for Invalid Host/Referer request header?无效主机/引用请求标头的最合适的 HTTP 状态代码是什么?
【发布时间】:2018-03-25 21:48:27
【问题描述】:

我正在编写一个 Node.js/NPM 模块,用于通过服务器端 Host 和 Referer [sic] 标头验证来保护 express 服务器免受 DNS Rebind attacks 的侵害。服务器管理员指定列入白名单的主机和/或引用者,任何不包含这些白名单值的请求都将收到错误状态代码并且没有结果。

当客户在请求中提供无效的 Host 或 Referer 标头时,或者当需要时他们根本没有提供时,最合适的 HTTP status code 返回给客户? 我在想 401 Unauthorized,但我想获得第二意见。也可以为 400 Bad Request 进行论证,或者我想,412 Precondition Failed。

服务器是否有义务通过响应标头或正文通知客户端为什么他们的请求被拒绝(例如,需要列入白名单的主机)或者是否可以使用错误代码进行响应并让客户端想知道安全性/混淆目的?

【问题讨论】:

    标签: http security web server http-status-codes


    【解决方案1】:

    您可能是对的,最佳匹配似乎是未经授权。但是最匹配的HTTP状态码不是401,实际上是403

    403 状态码表示The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account of some sort.,这句话的后半部分非常适合您的用例。

    见:https://stackoverflow.com/a/6937030/945214

    对于所有未经授权/未经身份验证的请求,建议不要回复任何解释,因为这将是您服务器的信息泄漏:http://projects.webappsec.org/w/page/13246936/Information%20Leakage

    【讨论】:

    • 没错!这些链接和引用很有帮助。结果我发送了一个没有所需 WWW-Authentication 标头的 401,这违反了规范。 403 Forbidden 似乎确实更合适。在阅读了其中的一些 ^ 链接之后,似乎“未经身份验证”将是 401“未经授权”状态代码的更合适的名称......
    猜你喜欢
    • 2012-07-12
    • 2012-05-21
    • 1970-01-01
    • 2019-03-30
    • 2018-02-24
    • 2016-06-12
    • 2017-08-26
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多