电子商务网站应在用户完成付款过程时为他们保留产品(更多信息)。这会产生潜在的拒绝服务风险,攻击者可以保留许多产品而永远无法完成付款 - 保留所有库存并阻止合法销售。
如何防御?
我考虑的一种选择是在允许预订之前对用户进行尽可能多的验证。但是您无法进行太多验证 - 整个想法是任何人都可以从您的商店购买。您可能需要经过验证的电子邮件,但这对用户来说很不方便,而且攻击者仍然很容易验证大量电子邮件。
电子商务网站应在用户完成付款过程时为他们保留产品(更多信息)。这会产生潜在的拒绝服务风险,攻击者可以保留许多产品而永远无法完成付款 - 保留所有库存并阻止合法销售。
如何防御?
我考虑的一种选择是在允许预订之前对用户进行尽可能多的验证。但是您无法进行太多验证 - 整个想法是任何人都可以从您的商店购买。您可能需要经过验证的电子邮件,但这对用户来说很不方便,而且攻击者仍然很容易验证大量电子邮件。
我见过两个主要的解决方案:
我偶尔会看到这样的通知,但仅限于库存真正重要的地方(通常是票务网站)。
我还为小型企业建立了许多电子商务网站,他们的首选解决方案始终相同:
即使您没有 JIT 制造能力,它通常也不是关键因素。有时您可以直接从制造商处发货。大多数情况下,您的库存周转率足够低,这无关紧要。有时您必须在客户下订单后与他们联系,并让他们知道延迟。
简而言之,这更多是一个商业问题,并不是所有的企业都关心。
废弃的购物车管理流程是尝试验证合法订单的关键。即使在订单高峰期也使用您的预期订单模式。通过唠叨他们废弃的购物车来获得用户的参与。如果他们不使用电子邮件或重新登录,即使在引诱之后,您也可以注销订单。
不完全是基于安全的解决方案,但它是在实践中所做的。
预订是一种特权
如果可以,我们会在结账时预订产品:
返回用户 - 之前已下订单并已付款的用户。他们的帐户更受信任,可以随时预订产品。
新用户:
为了实现这一点,需要有一个“defcon”级别,大概基于过去一小时内放弃结账的数量等。
Schroeder 建议可以使用行为分析来确定用户是否是人类。这会很整洁,但我不会自己编写行为分析代码。如果有开源解决方案,也许我会使用它。
编辑 - Square 的 API 有帮助
我已经意识到 Square 的 API 在这方面有很大帮助。使用他们的 API,客户端代码生成一次性支付令牌。这被提交,然后服务器端代码对令牌收费。
提交令牌后,应用程序可以检查库存水平。如果用户输入他们的详细信息,这对用户来说体验还不错,但是在从卡扣款之前订单就失败了。当用户输入卡片详细信息时,该应用程序不需要保留库存。而且我预计 DoS 不太可能发生,因为您无法轻松地批量获得 Square 令牌(尽管我还没有测试过!)
这种安排有点像两阶段提交。
我了解“我不是机器人”复选框正在对鼠标移动进行分析。事实上,下面的技术并不要求您实际勾选一个框;它只是在寻找一些鼠标移动数据来输入机器学习算法。然后算法决定你是否是人类。
也许这个过程可以应用于“添加到购物车”按钮(而不是“我不是机器人”复选框)。
在保留库存之前确定用户是真实用户,将使您的 DoS 攻击更加困难(可能非常困难)。
这是 Google 的reCapture 3使用的过程,所以应该很容易实现。(感谢评论中的@paj28)