api - 限制过快提交的交易
问题描述
在我的 Web 应用程序中,我有一个提供 API 的后端和一个使用它们的前端应用程序。
根据 OWASP 应用程序安全验证标准:
该应用程序将仅按顺序步骤顺序处理业务逻辑流,所有步骤都在真实的人工时间内处理
由于我们使用后端 API 来提交来自前端应用程序的数据,我们如何确保它只在现实的人工时间内进行处理?
如果它是单个应用程序,也许我们可以检查呈现和提交表单之间的时间差,因为我们正在使用 API 不确定如何检查这一点。
解决方案
让我们假设以下。我们有一个三步过程。步骤如下:
- 步骤1
- 第2步
- 第 3 步
我们要确保没有人在第 1 步之前触发第 2 步,并且他没有在第 1 步之后触发第 2 步。
如果我们是有状态的(因为我们使用例如服务器会话来存储数据),那么解决方案很容易。让我们在会话中存储用户执行的最后一步是第 1 步,并包含时间戳。在执行第 2 步时,我们验证之前存储在会话中的数据。
如果我们想成为无状态的,那么我们可以将信息,即用户使用一些时间戳执行步骤 1 的信息移动到客户端,但使用一些消息身份验证代码 (MAC) 对其进行签名。在这里,我们将面临一个明显的缺陷,即用户可以尝试重用这些数据并制造对步骤 2 的多次调用,而只执行一次步骤 1。为了解决这个问题,我们需要更深入地包含一些我们也能够验证的难以猜测的交易 ID。这将使整个解决方案成为特定的问题。
推荐阅读
- python - 获取多维数组中的最大值、最小值和最后一个索引值
- docker - 当我尝试执行我的 Docker 容器时为什么会出现这个错误?绑定:地址已经在使用中
- c# - '参数无效。' 尝试从数据库 MySql 中检索图像时
- terraform - Terraform Assume Role 记录错误?
- ngx-formly - 隐藏/显示自定义包装控件
- elasticsearch - 如何在 Elasticsearch 中改进/增强文本模糊搜索?
- python - 你能用 minecraft_launcher_lib 解释一下这个错误吗?
- ruby-on-rails - Ruby on Rails html.erb 格式化和 linting
- python - 在 Mac 上运行 Python GUI 应用程序时出现问题
- python - Python ThreadPoolExector 内存泄漏?