【问题标题】:Is status code 404 appropriate when a user isn't authenticated?当用户未通过身份验证时,状态码 404 是否合适?
【发布时间】:2018-09-23 14:52:39
【问题描述】:

我从事 Web 开发(主要作为后端开发人员)工作近 10 年,当用户未通过身份验证时,我使用的大多数服务返回状态为 401 Unauthorized。在最近与一位同事的讨论中,他们建议我们在用户未通过身份验证时返回状态 404 Not Found,这样我们甚至不会透露该 URL 中存在的端点。

我知道他们来自哪里,但对我来说感觉不对。这样你就不能轻易判断失败是因为用户没有经过身份验证,还是因为 URL 不正确。

我查看了 RFC7235,它声明如下:

404(未找到)状态码表示源服务器已 找不到目标资源的当前表示或者不是 愿意透露它的存在。

这与我的同事建议的参数相同,所以当用户未通过身份验证时,我是否应该为请求返回 404 Not Found

【问题讨论】:

    标签: http http-status-code-404


    【解决方案1】:

    你可以在RFC 7231中找到关于403 Forbidden状态码的类似说法:

    希望“隐藏”当前存在的源服务器 禁止的目标资源 MAY 改为以状态码响应 404(未找到)

    因此,通常由您和您的团队决定是使用404 还是401 状态码。


    P.S.:一些网络安全应用程序和工具正在分析 404 页面,以便稍后跳过类似页面。 URL 结构有时也会被分析。

    因此,如果您有一些敏感数据或不想向任何人透露您的项目结构 - 404 Not Found 是一个出于安全原因的好主意。并且您的应用/API 变得更难进行逆向工程。

    这种方法的缺点是它在客户端有点不明显 - 当它收到 404 Not Found 时,您的客户将更难找出问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 2013-07-20
      • 2018-11-15
      • 1970-01-01
      相关资源
      最近更新 更多