通过产品预订防御 DoS

信息安全 拒绝服务 电子商务
2021-08-27 00:59:09

电子商务网站应在用户完成付款过程时为他们保留产品(更多信息)。这会产生潜在的拒绝服务风险,攻击者可以保留许多产品而永远无法完成付款 - 保留所有库存并阻止合法销售。

如何防御?

我考虑的一种选择是在允许预订之前对用户进行尽可能多的验证。但是您无法进行太多验证 - 整个想法是任何人都可以从您的商店购买。您可能需要经过验证的电子邮件,但这对用户来说很不方便,而且攻击者仍然很容易验证大量电子邮件。

4个回答

我见过两个主要的解决方案:

您的产品已保留 X 分钟

我偶尔会看到这样的通知,但仅限于库存真正重要的地方(通常是票务网站)。

我还为小型企业建立了许多电子商务网站,他们的首选解决方案始终相同:

忽略它

即使您没有 JIT 制造能力,它通常也不是关键因素。有时您可以直接从制造商处发货。大多数情况下,您的库存周转率足够低,这无关紧要。有时您必须在客户下订单后与他们联系,并让他们知道延迟。

简而言之,这更多是一个商业问题,并不是所有的企业都关心。

废弃的购物车管理流程是尝试验证合法订单的关键。即使在订单高峰期也使用您的预期订单模式。通过唠叨他们废弃的购物车来获得用户的参与。如果他们不使用电子邮件或重新登录,即使在引诱之后,您也可以注销订单。

不完全是基于安全的解决方案,但它是在实践中所做的。

预订是一种特权

如果可以,我们会在结账时预订产品:

  • 返回用户 - 之前已下订单并已付款的用户。他们的帐户更受信任,可以随时预订产品。

  • 新用户:

    • 在正常情况下,他们可以在结账时预订产品。
    • 如果正在进行 DoS 尝试,则不允许新用户保留产品。订单页面上可能会包含警告,但我不会这样做,因为它可能只会引起混乱。

为了实现这一点,需要有一个“defcon”级别,大概基于过去一小时内放弃结账的数量等。

Schroeder 建议可以使用行为分析来确定用户是否是人类。这会很整洁,但我不会自己编写行为分析代码。如果有开源解决方案,也许我会使用它。


编辑 - Square 的 API 有帮助

我已经意识到 Square 的 API 在这方面有很大帮助。使用他们的 API,客户端代码生成一次性支付令牌。这被提交,然后服务器端代码对令牌收费。

提交令牌后,应用程序可以检查库存水平。如果用户输入他们的详细信息,这对用户来说体验还不错,但是在从卡扣款之前订单就失败了。当用户输入卡片详细信息时,该应用程序不需要保留库存。而且我预计 DoS 不太可能发生,因为您无法轻松地批量获得 Square 令牌(尽管我还没有测试过!)

这种安排有点像两阶段提交。

我了解“我不是机器人”复选框正在对鼠标移动进行分析。事实上,下面的技术并不要求您实际勾选一个框;它只是在寻找一些鼠标移动数据来输入机器学习算法。然后算法决定你是否是人类。

也许这个过程可以应用于“添加到购物车”按钮(而不是“我不是机器人”复选框)。

在保留库存之前确定用户是真实用户,将使您的 DoS 攻击更加困难(可能非常困难)。

这是 Google 的reCapture 3使用的过程,所以应该很容易实现。(感谢评论中的@paj28)