不确定我是否正确,但假设我有一个 REST API 和端点,例如,创建一些资源,假设@POST
创建用户。
如何保护我的应用程序免受用户使用类似 10000 次 API 调用来创建无用资源的 for 循环?
是否可以编写一个过滤器来阻止这种行为?我希望你明白我的意思。
不确定我是否正确,但假设我有一个 REST API 和端点,例如,创建一些资源,假设@POST
创建用户。
如何保护我的应用程序免受用户使用类似 10000 次 API 调用来创建无用资源的 for 循环?
是否可以编写一个过滤器来阻止这种行为?我希望你明白我的意思。
你有很多选择:
让我们用伪代码说ABUSING_ID = md5(ip+useragent)
您可以在不同的系统级别(客户端、负载平衡器/Web 服务器端(fail2ban)、应用程序级别)实现此方案
您覆盖的级别越多越好。
一些初学者可以使用 gui-automation 在您的 UI 中单击(如果它公开了您的 API),因此您需要客户端保护。
更高级的欺诈者可以使用脚本来 curl 你的 api,你需要服务器端保护
另一种使用 phantonjs 之类的东西来模拟浏览器环境(客户端保护)
一些大亨知道足够雇用廉价工人点击您的网站/使用定制工具提出请求
proxy-servers/tor/botnets/browser-fingerprinting 预防(基本上,每个请求都会更改用户代理和其他详细信息)等。
如果你的 API 被大量使用,你可以从收集统计数据开始——它会在以后得到回报。在最坏的情况下,您将需要一个数据科学家和编码人员团队来创建一个有效的、难以破解的欺诈预防系统。
这是整个世界的战争:-)
PS 我没有说任何关于授权 API 调用(令牌等)的内容,因为授权 API 调用更容易捕获,我们在这里讨论的是不受保护的 REST 查询
PPS 还有另一个指标,但您必须将其视为最后的手段:如果您的服务是国际性的、全球级别的,但您有太多来自虚构的欺诈斯坦的欺诈行为,而这种欺诈行为对您的业务造成的伤害比良好的流量更大提供利润,您应该封锁整个国家并发出通知,以便来自该国家/地区的好客户可以通过更严格的协议进行注册。
我同意@strangeqargo 的回答。如果你不想自己实现,有几个服务会分析请求并建议是否阻止它们,我在ShieldSquare有很好的经验