访问未授权/未找到资源时找不到404?

时间:2011-01-02 07:24:12

标签: security web-applications

假设我有ID为1,2,3,4的任务。用户A可以访问1&仅限2。

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

2 个答案:

答案 0 :(得分:2)

我们假设您的网站包含一些具有以下访问权限的网页:

  1. 一般页面,每个人都有权访问。
  2. 需要登录用户的页面,仍可由大众公众访问。
  3. 一个管理页面,只能由一小群人访问。
  4. 不存在的页面。
  5. 因此,对于没有权利的访问者,我建议使用:
    使用 2 403 (无权限)。
    404 (不存在) 3 ,因为没有一般用户应该遇到任何指向该网页的链接,因此它们也应该不存在。
    显然 4 ,一个不存在的页面,应始终产生 404 响应。

答案 1 :(得分:1)

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

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

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