【问题标题】:Http 403 or 404 for accessing restricted WEB resource?用于访问受限 WEB 资源的 Http 403 或 404?
【发布时间】:2010-12-18 21:44:01
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

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


【解决方案1】:

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

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

如果混淆文件名很重要,但是我建议为未经身份验证的用户返回文件夹中的任何文件(现有或不存在)的 403(基本上你拒绝他们查看文件夹中的内容,所以错误代码对我来说似乎是合法的)。我可能建议通过 CustomErrors 处理程序来执行此操作,该处理程序在决定告诉您多少信息之前区分您是否已登录(这样您仍然为经过身份验证的人保持准确的 404 错误)或捕获异常的 HttpModule 404 引发并为经过身份验证的用户和未经身份验证的用户呈现不同的结果。

【讨论】:

  • 另一方面,不允许任何人知道某些文件的存在是有充分理由的。 IIRC 当幸存者是一个新的电视节目时,有人通过查找哪些未列出的文件存在而帽子文件没有发现谁在赛季结束前获胜。或者,可能不允许财务报表,但好的和坏的报表可能在文件名上有所不同——或者当它们提前准备好的时候。甚至不说文件存在就可以避免这种旁通道...
  • 哦,重要的是要注意安全需要保密。它几乎读起来就像您的帖子将其与真正的“通过默默无闻的安全性”混淆了,这将使某些东西完全可用,但不会告诉任何人 - 与 OP 不同,其中访问被拒绝,但安全性通过默默无闻不会拒绝访问,因为否则资源将不受保护。
  • 是的,我同意你的观点,我得到了更多的印象,他是说如果用户知道该文件存在,它会增加他们通过定位他们而不是名称来入侵网站的机会该文件实际上包含私人信息本身(在这种情况下,我认为获得的安全性并不重要)。通过您的示例,我可以看到当您提供 404 或可能只是将用户重定向到 403/404 组合页面时的潜在场景(“此文件不存在或您无权查看它"并且不要告诉他们是哪个)。
  • 好吧,如果它是秘密的,不把信息放在公开可用的网络服务器上怎么样?标准的存在是有原因的。 403 和 404 定义明确。相应地使用它们。
  • Fyjham,combo 403/404 是相当有趣的想法,我也想过。但是有一件事仍然不明显:我们是否应该始终将未登录的用户重定向到登录页面,即使他输入了不存在的 URL,或者这样的功能(重定向到登录以获取受限资源)对于公共站点和应该只用于 Intranet 站点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
相关资源
最近更新 更多