对于存在但用户没有足够权限(他们未登录或不属于正确的用户组)的网页,要提供的正确HTTP响应是什么?

401未授权?403禁止?还有别的吗?

到目前为止,我读到的每一篇文章都不太清楚两者之间的区别。每个响应都适合哪些用例?


当前回答

你又是谁??(程序员走进一个没有ID或ID无效的酒吧)

403:太好了,又是你。我盯着你了。走吧,离开这里。(程序员走进一家86岁的酒吧)

其他回答

这是一个更老的问题,但一个从未真正提出过的选项是返回404。从安全角度来看,投票最高的答案存在潜在的信息泄漏漏洞。例如,假设所讨论的安全网页是一个系统管理页面,或者更常见的是,是一个用户无权访问的系统记录。理想情况下,您不希望恶意用户知道那里有一个页面/记录,更不用说他们无权访问。当我构建这样的东西时,我将尝试在内部日志中记录未经验证/未经授权的请求,但返回404。

OWASP提供了有关攻击者如何将此类信息用作攻击一部分的更多信息。

其含义如下:

401:用户未(正确)验证,资源/页面需要验证

403:用户的角色或权限不允许访问请求的资源,例如,用户不是管理员,请求的页面是管理员的。

注意:从技术上讲,403是401的超集,因为给未经认证的用户403也是合法的。无论如何,区分更有意义。

401未经授权:我不知道你是谁。这是一个身份验证错误。403禁止:我知道你是谁,但你没有访问此资源的权限。这是一个授权错误。

根据RFC 2616(HTTP/1.1)403在以下情况下发送:

服务器理解该请求,但拒绝履行该请求。授权没有帮助,不应重复该请求。如果请求方法不是HEAD,并且服务器希望公开请求未完成的原因,则应在实体中描述拒绝的原因。如果服务器不希望向客户端提供此信息,则可以使用状态代码404(未找到)

换句话说,如果客户端可以通过认证访问资源,则应发送401。

编辑:RFC2616已过时,请参阅RFC9110。

401未授权:

如果请求已经包括授权凭证,则401响应指示已拒绝对这些凭证的授权。

403禁止:

服务器理解该请求,但拒绝履行该请求。

从您的用例来看,用户似乎没有经过身份验证。我会返回401。