用于访问受限WEB资源的HTTP 403或404?

时间:2009-11-20 21:33:34

标签: asp.net asp.net-mvc http-status-code-404 security http-status-code-403

我的问题与此Return “correct” error code, or protect privacy?非常相似,但我想听听一些不同的答案。

我们有WEB站点,大多数页面可能会被未登录的用户访问。但是,如果未登录用户尝试访问需要授权的资源(页面)(用户必须具有FooRole角色),我们会自动将其重定向到“登录”页面,并在提供正确的凭据后返回到受限资源。如果用户提供了正确的凭据,但是他的访问权限恰好是不够的(他有BarRole而不是FooRole),WEB网站应该做什么?

在当前实现中,我们返回HTTP 403响应(禁止)。但是一些开发人员认为必须返回404代码,因为它提供了更好的安全性 - 用户不应该区分不存在和不可访问的资源。从安全角度来看,最好返回404,但在描述的情况下,用户被重定向到登录页面并且该行为“提示”此类页面存在因此它不是非常逻辑地返回404(它是我的想法)。如果用户已经被授权并尝试访问受限资源(直接修改URL),那么,它可能在逻辑上返回404错误。

也许这样的“自动重定向登录”功能不好?你能否告诉我在这种情况下哪种行为更“标准/良好/用户友好/无黑客”?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为更适合为登录失败返回准确的403错误代码。

至于你模糊实际存在的文件的问题一般来说,“通过默默无闻的安全性”(流行语)被认为是一种非常糟糕的安全模型,如果用户没有这些URL就知道这些URL真的应该没有任何好处无论如何都要访问它们(如果它们打破了访问控制,我认为有一种相当简单的方法可以找到文件的URL)。

如果对模糊文件名进行模糊处理很重要,我会建议为未经身份验证的用户返回403文件夹中的任何文件(现有或不存在)(实质上,您拒绝他们访问以查看文件夹中的内容,因此错误代码对我来说似乎合法)。我可能建议通过CustomErrors处理程序执行此操作,该处理程序可以区分您是否已登录,然后再决定告诉您多少(这样您仍然可以为经过身份验证的人保留准确的404错误)或HttpModule捕获异常a 404为经过身份验证的用户和未经身份验证的用户抛出并呈现不同的结果。