如何避免滥用REST API?阻止来自同一客户端JAX-RS(Dropwizard)的多对多调用



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

如何保护我的应用程序不受那些使用10000个API调用来创建无用资源的for-loop用户的影响?

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

您有很多选择:

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

假设在伪代码ABUSING_ID = md5(ip+useragent)

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

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

你覆盖的级别越多越好。

  • 一些初学者可以使用gui自动点击UI(如果它暴露了API),因此您需要客户端保护。

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

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

  • 一些大亨知道如何雇佣廉价工人点击你的网站/使用定制工具提出请求

  • 代理服务器/tor/botnets/浏览器指纹识别预防(基本上,每次请求都会更改用户代理和其他细节)等

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

全世界都在战争中:-)

附言:我没有谈到授权的API调用(令牌等),因为授权的API调用更容易捕获,我们在这里讨论的是无保护的REST查询

附言:还有另一个衡量标准,但你必须把它视为最后的手段:如果你的服务是国际性的、全球性的,但你有太多来自虚构的Fraudistan的欺诈行为,而这种欺诈行为对你的业务的伤害大于好的流量带来的利润,你应该封锁整个国家并发出通知,这样来自该国的好客户就可以通过更严格的协议注册。

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

相关内容

  • 没有找到相关文章

最新更新