拒绝访问: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 - 禁止访问: 访问被拒绝。您无权使用所提供的凭据查看此目录或页面。 怎么解决 ?
导入图像时 Parse.com “访问被拒绝” - 图像访问被拒绝(请求失败:禁止 (403))
windows server 2003 iis配置 出现 http 403 禁止访问,怎么办,网页内显示“你无权查看该网页”