拒绝访问:403 还是 404?

Posted

技术标签:

【中文标题】拒绝访问:403 还是 404?【英文标题】:Access denied: 403 or 404? 【发布时间】:2015-04-19 09:47:21 【问题描述】:

如果有人请求访问他不被允许看到的实体,应该返回什么状态代码?你可能会说它是 403: Forbidden。但是返回 404 是常见的做法吗?我不希望有人知道如果不允许他看到这个实体甚至存在。你怎么看?

【问题讨论】:

如果资源存在且不允许客户端访问,你会返回什么? 【参考方案1】:

使用 404 未找到。

404状态码也可以用在403场景中,当服务器 不想发回拒绝服务的原因 要求。 一个很好的例子是当服务器感知到某种 攻击,可能是蛮力攻击。在这种情况下, 服务器响应 404 Not found 而不是 403 Forbidden 和 解释。

来源:Pro ASP.NET Web API Security

【讨论】:

【参考方案2】:

返回403 Forbidden。如果您为不允许客户端访问的每个请求返回此信息,并且如果您从不返回404 Not Found,则客户端一无所知。

这完全取决于这对你有多重要:

我不希望有人知道如果不允许他看到这个实体甚至存在。

如果这真的很重要,请始终返回403 Forbidden

【讨论】:

这与总是返回 404 基本相同,您只是为这两种情况选择了不同的状态来返回。作为记录,如果你总是返回 404,客户端什么也学不到。【参考方案3】:

嗯..这取决于..

如果您的端点 URL 泄露了敏感信息(例如,在 Dropbox API 中,您通过文件名而不是 ID 来引用文件 - 因此 URL 包含文件名)或者您可能正在使用顺序 ID(例如,可以被暴力破解的升序 ID),返回 404。

如果您需要支持对您无权访问的资源的“请求访问”功能,请返回 403,以便您的客户端可以分辨出差异。

一般来说,如果您的 API 使用 ID 并且从不将信息作为其 URL 的一部分透露,并且您使用 UUID 作为 ID,我会选择 403.. 与当今许多知名且非常安全的应用程序一样(Google、微软等)。

【讨论】:

这很棘手,因为 401 也可以用于该请求访问场景。或者,您始终可以返回 403(如其他人所建议的那样)并允许对基本上直接进入垃圾箱的不存在资源的访问请求。 401 可能不是一个好主意,因为这意味着 身份验证 存在问题。 IE。如果自动客户端正在使用令牌,并且由于权限问题而获得 401。它可能会假定令牌已过期,然后重新进行身份验证以获取新令牌。然后再试一次,得到一个 401,然后重新认证,再试一次...... 如果您对该对象没有权限,您能否提供一个返回403 的知名API 方法的具体示例? @DmitriyPopov 我认为 Google Docs 应该就是这样的例子。 @DmitriyPopov developers.google.com/drive/api/v3/…【参考方案4】:

希望您根据我在下面发布的内容对 HTTP 错误有所了解:

HTTP 401 错误 :: 当网站访问者尝试访问受限网页但无权访问时会发生此错误。

HTTP 403 错误 :: 此错误类似于 401 错误,但请注意未授权和禁止的区别。例如,如果您尝试访问任何网站上的目录(禁止访问),就会发生这种情况。

HTTP 404 错误 :: 当您尝试访问不存在的 Web 服务器(通常是网页)上的资源时,会发生 404 错误。

【讨论】:

:P 忘了我没有在我的主站点门户上工作。它具有与我刚才错误的功能相似的功能!无论如何,这个答案是你要找的吗? 不,只是状态码的定义,我知道它们的意思。

以上是关于拒绝访问:403 还是 404?的主要内容,如果未能解决你的问题,请参考以下文章

403 - 禁止访问: 访问被拒绝。您无权使用所提供的凭据查看此目录或页面。 怎么解决 ?

如何解决安装IIS时出现HTTP错误403禁止访问?

导入图像时 Parse.com “访问被拒绝” - 图像访问被拒绝(请求失败:禁止 (403))

400/404等状态码含义

IIS 中文文件名下载会出现403访问被拒绝

windows server 2003 iis配置 出现 http 403 禁止访问,怎么办,网页内显示“你无权查看该网页”