限制过快提交的交易
Restricting too quickly submitted transactions
在我的 Web 应用程序中,我有一个提供 API 的后端和一个使用它们的前端应用程序。
根据 OWASP 应用程序安全验证标准:
The application will only process business logic flows in sequential
step order, with all steps being processed in realistic human time
由于我们使用后端 API 从前端应用程序提交数据,我们如何才能确保它只在实际的人工时间内处理?
如果是单个应用程序,也许我们可以检查呈现和提交表单之间的时间差,因为我们使用的 API 不确定如何检查。
让我们假设如下。我们有一个三步流程。步骤如下:
- 第 1 步
- 第 2 步
- 第 3 步
我们要确保没有人在步骤 1 之前触发步骤 2,并且他在执行步骤 1 后没有触发步骤 2。
如果我们是有状态的(因为我们使用例如服务器会话来存储数据),那么解决方案就很简单。让我们在会话中存储用户执行的最后一步是第 1 步,并包含时间戳。在执行第 2 步时,我们验证之前存储在会话中的数据。
如果我们想成为无状态的,那么我们可以移动信息,即用户使用一些时间戳向客户端执行了第 1 步,但使用一些消息身份验证代码对其进行签名 (MAC)。在这里,我们将面临一个明显的缺陷,即用户可以尝试重用此类数据并编造许多对步骤 2 的调用,只执行一次步骤 1。为了解决这个问题,我们需要更深入地研究并包含一些我们也能够验证的难以猜测的交易 ID。这将使整个解决方案成为特定问题。
在我的 Web 应用程序中,我有一个提供 API 的后端和一个使用它们的前端应用程序。
根据 OWASP 应用程序安全验证标准:
The application will only process business logic flows in sequential step order, with all steps being processed in realistic human time
由于我们使用后端 API 从前端应用程序提交数据,我们如何才能确保它只在实际的人工时间内处理?
如果是单个应用程序,也许我们可以检查呈现和提交表单之间的时间差,因为我们使用的 API 不确定如何检查。
让我们假设如下。我们有一个三步流程。步骤如下:
- 第 1 步
- 第 2 步
- 第 3 步
我们要确保没有人在步骤 1 之前触发步骤 2,并且他在执行步骤 1 后没有触发步骤 2。
如果我们是有状态的(因为我们使用例如服务器会话来存储数据),那么解决方案就很简单。让我们在会话中存储用户执行的最后一步是第 1 步,并包含时间戳。在执行第 2 步时,我们验证之前存储在会话中的数据。
如果我们想成为无状态的,那么我们可以移动信息,即用户使用一些时间戳向客户端执行了第 1 步,但使用一些消息身份验证代码对其进行签名 (MAC)。在这里,我们将面临一个明显的缺陷,即用户可以尝试重用此类数据并编造许多对步骤 2 的调用,只执行一次步骤 1。为了解决这个问题,我们需要更深入地研究并包含一些我们也能够验证的难以猜测的交易 ID。这将使整个解决方案成为特定问题。