Grape 和防止大规模分配滥用
作者: jonallured创建于 2024年3月7日更新于 2024年5月22日
标签feature requestdiscuss!
tl;dr: 很容易写出 Grape 端点,而这些端点不受 大量赋值漏洞 的保护。 我创建了一个名为 PretendGravity 的 Rails 应用程序示例,这是对 Artsy 中名为 Gravity 的主要 API 服务的致敬。 我添加了一个名为 Artwork 的模型,然后在不使用 Grape 的情况下实现 CRUD 端点 - 仅仅是原始的 Rails 控制器。 然后,我在项目上安装了 Grape 并使用 Grape 端点实现了相同的 CRUD 操作。 我编写了请求规范以验证两组端点的行为是否相同。 然后,我创建了一个 PR,实现了新的功能 - 为 Artwork 模型添加一个新字段,该字段不应允许通过 API 设置。 我使用此 PR 来演示 Grape 用户很容易编写出不受大量赋值漏洞保护的端点代码。 该 PR 上的最后一次提交 添加了一个失败的测试,显示了漏洞的实际情况。 同样的类型的测试在 Rails 端上也被编写过,并且通过了,因为在那儿我们通过 Rails 的强参数提供了保护。 然后,我编写了一系列可能尝试的缓解措施。
内容来源: ruby-grape/grape