4

不确定我是否正确,但假设我有一个 REST API 和端点,例如,创建一些资源,假设@POST创建用户。

如何保护我的应用程序免受用户使用类似 10000 次 API 调用来创建无用资源的 for 循环?

是否可以编写一个过滤器来阻止这种行为?我希望你明白我的意思。

4

2 回答 2

1

你有很多选择:

  • 当某个 ip 产生大量查询时阻止 ip
  • 阻止 ip+useragent+有关用户浏览器的其他详细信息
  • 使用行为模式匹配阻止用户
  • 显而易见的选择是在电子邮件验证(注册过程)后面隐藏一些 REST 方法

让我们用伪代码说ABUSING_ID = md5(ip+useragent)

  • 你可以有类似定价系统的东西,所以每个 api 调用都有一个价格(0 到 10),并将每个 ABUSING_ID+他们的 api 调用价格存储在数据库中(即一天)。因此,当给定 ABUSING_ID 的请求总价格超过阈值时,您会阻止它们。(更正式,我敢肯定,更好的方法是@roman-vottner 提出的漏桶算法

您可以在不同的系统级别(客户端、负载平衡器/Web 服务器端(fail2ban)、应用程序级别)实现此方案

您覆盖的级别越多越好。

  • 一些初学者可以使用 gui-automation 在您的 UI 中单击(如果它公开了您的 API),因此您需要客户端保护。

  • 更高级的欺诈者可以使用脚本来 curl 你的 api,你需要服务器端保护

  • 另一种使用 phantonjs 之类的东西来模拟浏览器环境(客户端保护)

  • 一些大亨知道足够雇用廉价工人点击您的网站/使用定制工具提出请求

  • proxy-servers/tor/botnets/browser-fingerprinting 预防(基本上,每个请求都会更改用户代理和其他详细信息)等。

如果你的 API 被大量使用,你可以从收集统计数据开始——它会在以后得到回报。在最坏的情况下,您将需要一个数据科学家和编码人员团队来创建一个有效的、难以破解的欺诈预防系统。

这是整个世界的战争:-)

PS 我没有说任何关于授权 API 调用(令牌等)的内容,因为授权 API 调用更容易捕获,我们在这里讨论的是不受保护的 REST 查询

PPS 还有另一个指标,但您必须将其视为最后的手段:如果您的服务是国际性的、全球级别的,但您有太多来自虚构的欺诈斯坦的欺诈行为,而这种欺诈行为对您的业务造成的伤害比良好的流量更大提供利润,您应该封锁整个国家并发出通知,以便来自该国家/地区的好客户可以通过更严格的协议进行注册。

于 2016-05-23T20:33:35.040 回答
0

我同意@strangeqargo 的回答。如果你不想自己实现,有几个服务会分析请求并建议是否阻止它们,我在ShieldSquare有很好的经验

于 2017-01-09T17:58:02.360 回答