我正在编写Node.js / NPM模块,通过服务器端Host和Referer [sic]标头验证来保护快速服务器免受DNS Rebind attacks的影响。服务器管理员指定列入白名单的主机和/或引用者,任何不包含这些列入白名单的值的请求都将收到错误状态代码,但没有结果。
当他们在请求中提供无效的Host或Referer标头时,或者在需要时无法提供一个主机或Referer标头时,返回客户端最合适的HTTP status code是什么。我想401未经授权,但我想得到第二意见。也可以对400 Bad Request进行论证,或者我认为,412 Precondition Failed。
服务器是否有义务通过响应标头或正文通知客户端他们的请求被拒绝的原因(例如,需要列入白名单的主机),或者是否可以使用错误代码进行响应并让客户端想知道安全性/混淆目的?
答案 0 :(得分: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。