【问题标题】:is CSRF a threat in simple Hash Calculator PHP application?CSRF 是简单哈希计算器 PHP 应用程序中的威胁吗?
【发布时间】:2018-01-02 08:53:32
【问题描述】:

我正在学习哈希计算器课程。这是一个简单的 Web 应用程序,它在主页上包含两个提交表单,用户可以在其中提交哈希并获取文本并查看诗句。

尽管应用程序很简单,但它需要在其中实现安全功能。我设法减轻了 SQL 和 XSS 攻击。然后,我决定使用两个漏洞评估扫描程序“Acunetix”和“Nessus”。两个扫描器都显示我的应用程序容易受到 CSRF 的攻击,针对这种攻击的保护措施是在 PHP 中实现会话和随机令牌。

我已阅读有关此攻击及其作用的信息。但是,由于这种攻击主要针对已经过身份验证的用户和 cookie,我感到非常困惑,所以我的问题是?我是否需要将会话和令牌嵌入到我的应用程序中以简单地返回和恢复哈希和明文?如果是,我为什么要这样做以及周围有哪些潜在威胁?

非常感谢!

【问题讨论】:

  • CSRF 保护确实是一种确保任何请求都来自您的表单的方法(因此没有人可以从其他地方发布到您的后端)。如果没有 CSRF,任何人都可以将您的后端与他们自己的前端一起使用。所以实际上,如果你关心这个,添加 CSRF。如果您不关心是否有人从他们自己的站点/脚本向您的后端发帖,那么您不需要 CSRF。
  • @MagnusEriksson Anti-CSRF 无法防止 MitM/代理。
  • @user2864740 当然不是。不只有一种保护可以保护您免受一切侵害。但在这样的应用程序中,我认为中间人攻击真的不是什么大威胁。
  • @MagnusEriksson “没有 CSRF,任何人都可以将你的后端与他们自己的前端一起使用。” - Anti-CSRF 不会解决这个问题(MitM/proxy),所以这仍然是可能的。
  • 请参阅CSRF 以获得良好的一般性阅读。 CSRF 的基本问题是它允许(由于用户使用具有保留的 cookie 和身份验证等的同一浏览器)一个精心制作的请求 - “调用不需要的操作” - 假设当前会话-state(通常这是一个“登录”的帐户,尽管它会影响所有会话状态)。如果没有会话状态,则 CSRF 甚至不适用。

标签: php security hash csrf


【解决方案1】:

您的问题是对的,CSRF 保护需要是一个有意识的决定。我认为您可能至少想考虑在您的应用程序中这样做,这就是原因。

CSRF 是关于另一个网站能够诱使用户在访问恶意应用程序时无意中在您的应用程序中执行操作。诚然,大多数情况下,这利用了用户已经登录的事实,但情况并非如此。

对于您的应用程序,立即想到的两个与 CSRF 相关的威胁是:

  • 散列是 CPU 密集型的,另一方面,大型彩虹表中的搜索操作也可能是资源密集型的。这本身就存在拒绝服务风险,但您可以通过过滤掉请求过多的源 IP 来应对这种风险。但是,如果您的应用容易受到 CSRF 的攻击,那么高流量的网站可能会让其访问者在您的应用中执行此类操作,从而有效地执行分布式 DoS,而这更加难以防范。

  • 非常相似,如果您有应用程序的 API 并且没有针对 CSRF 的保护(例如,您有 access-control-allow-origin: *),任何其他网站将能够运行与他们想要的,无论是散列还是搜索,这可能会导致收入损失或分布式拒绝服务)。

也许这些不适用于您的确切用例,我只是想指出,即使没有任何类型的会话状态,CSRF 确实可能是一个问题,系统地发现此类潜在威胁的工具称为威胁建模。

【讨论】:

  • CORS 仅适用于浏览器 XHR/页内资源请求。虽然这可以通过“覆盖”这些访问来缓解特定类别的 CSRF,但它并不打算解决 CSRF。那么,假设有一个“昂贵的 GET 操作”,启用 CSRF 是如何防止这种情况发生的呢?
  • @user2864740 我不是故意的。我提出了两个场景,CSRF 可能成为这个应用程序中的一个问题,而没有传统意义上的会话状态和状态变化。 GET 操作天生就容易受到 CSRF 的攻击,因此您无法使用 GET 真正实现适当的 CSRF 保护。
  • 那么它不是 CSRF.. :} 我不反对使用其他更好的实践来强化应用程序(并且提出 CORS / DDoS 是非常有效的观点),但 CSRF 的定义非常狭窄。
  • 是的,我刚刚意识到这一点,我们在谈论CSRF的定义。 :) 感谢您的洞察力,它至少对我有用。我将上面的 CSRF 定义为“另一个网站能够诱使用户在访问恶意应用程序时无意中在您的应用程序中执行操作”。我认为您的定义比这更窄,仅此而已。 :)
【解决方案2】:

简短回答:不,您不需要,因为您没有“用户”(身份验证),所以您不需要 csrf 令牌。

【讨论】:

  • 任何基于 cookie 的会话状态都容易受到 CSRF 的影响。在这种情况下,听起来好像没有会话状态。 (虽然大多数“敏感操作”都通过身份验证进行保护,但身份验证并不是严格的先决条件。)
  • 大部分时间都是这样,但由于这个原因,他不需要 csrf 保护
  • 我同意本案的结论。
  • 我不同意,在某些情况下 CSRF 也可能是无状态应用程序中的一个问题,请参阅我的回答。
猜你喜欢
  • 2016-01-09
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 2016-06-23
  • 2016-05-14
相关资源
最近更新 更多