访问被拒绝:403还是404?

时间:2015-02-18 11:44:48

标签: rest http http-status-code-404 http-status-code-403

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

4 个答案:

答案 0 :(得分:21)

使用404未找到。

  

当服务器时,404状态代码也可用于403场景   不想发回拒绝服务的原因   请求。 一个很好的例子是当服务器感知某种类型的时候   攻击,可能是暴力攻击。在这种情况下,   服务器响应404找不到而不是403 Forbidden和an   解释

来源:Pro ASP.NET Web API Security

答案 1 :(得分:0)

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

这一切都取决于这对你有多重要:

  

我不希望有人知道如果他不被允许看到它,这个实体就会存在。

如果这非常重要,请务必返回403 Forbidden

答案 2 :(得分:0)

嗯..这取决于......

如果你的终点' URL显示敏感信息(例如,在Dropbox API中,您通过名称而不是ID来引用文件 - 因此URL包含文件名)或者您可能正在使用顺序ID(例如,可以使用升序ID)蛮力),返回404。

如果您需要支持"请求访问"您没有权限的资源功能,返回403,因此您的客户端可以分辨出来。

一般来说,如果您的API使用ID并且从不将信息显示为其网址的一部分,并且您使用UUID作为ID,那么我会使用403 ..就像现在许多知名且非常安全的应用程序一样(谷歌,微软等。)。

答案 3 :(得分:-4)

希望您根据我在下面发布的内容得到一些关于HTTP错误的说明:

HTTP 401错误:: 当网站访问者尝试访问受限制的网页但未获得授权时,会发生此错误。

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

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