Security 404访问未经授权/未找到的资源时未找到?

Security 404访问未经授权/未找到的资源时未找到?,security,web-applications,Security,Web Applications,假设我有ID为1、2、3、4的任务。仅允许用户A访问1和2 如果他试图访问未经授权的Task#3,我应该给出404还是说他未经授权?我从登录中了解到这一点,无论用户名是否有效,我总是给出一个通用的无效用户名/密码组合,以防止用户知道用户/资源是否存在 如果他试图访问任务5不存在,我应该给404吗?或者说在通用页面中找不到资源 如果用户无权访问该任务,但他知道该任务存在是可以的,请使用403。如果用户甚至不能确定是否存在他无权访问的任务,请使用404 尝试访问不存在的任务肯定会导致404响应 您

假设我有ID为1、2、3、4的任务。仅允许用户A访问1和2

  • 如果他试图访问未经授权的Task#3,我应该给出404还是说他未经授权?我从登录中了解到这一点,无论用户名是否有效,我总是给出一个通用的无效用户名/密码组合,以防止用户知道用户/资源是否存在
  • 如果他试图访问任务5不存在,我应该给404吗?或者说在通用页面中找不到资源

如果用户无权访问该任务,但他知道该任务存在是可以的,请使用403。如果用户甚至不能确定是否存在他无权访问的任务,请使用404

尝试访问不存在的任务肯定会导致404响应


您应该始终在HTTP响应中使用适当的状态代码,因为它告诉浏览器应该如何处理响应。如果返回带有200 OK状态代码的“resource not found”(未找到资源)错误消息,浏览器将认为该消息是用户请求的实际页面,并且可能会将其缓存。如果您使用404代码(或403等),浏览器将了解您发送回的页面实际上不是请求的页面,因此它将知道不缓存该页面或在浏览历史记录中输入其URL。响应的主体仍然可以是一个漂亮的HTML页面,其中包含一条供用户阅读的错误消息。

假设您有一个站点,其中包含一些具有以下访问权限的页面:

  • 每个人都可以访问的通用页面
  • 一个需要登录用户的页面,仍然可以被大众访问
  • 管理员页面,只能由一小群人访问
  • 不存在的页面 因此,对于没有权限的访问者,我建议使用:
    403(无权限)和2
    404(不存在)与3,因为一般用户不应看到该页面的任何链接,因此对于他们来说,该链接也应该不存在。

    显然,4,一个不存在的页面,应该总是导致404响应

    如果我们有一个API而不是一个页面呢?示例-问答网站有访客(或未登录用户)、普通用户和超级用户。如果所有用户都允许GET url-x,但只有超级用户才允许DELETE url-x呢。当普通用户进行deleteURL-x调用时,我们是否仍应返回404?如果我们使用的是API而不是页面呢?示例-问答网站有访客(或未登录用户)、普通用户和超级用户。如果所有用户都允许GET url-x,但只有超级用户才允许DELETE url-x呢。当普通用户发出DELETE url-x调用时,我们是否应该返回404?404表示该url不存在。403表示URL存在,但不允许用户删除它。