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

时间:2016-05-23 20:27:15

标签: rest api jax-rs fraud-prevention

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

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

是否可以编写阻止此类行为的过滤器?我希望你明白我的意思。

2 个答案:

答案 0 :(得分:0)

您有很多选择:

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

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

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

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

您覆盖的级别越高越好。

  • 一些初学者可以使用gui-automation来点击你的UI(如果它暴露你的API),所以你需要客户端保护。

  • 更高级的frauders可以使用脚本来压缩你的api,你需要服务器端保护

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

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

  • 代理服务器/ tor /僵尸网络/浏览器指纹识别预防(基本上,每次请求都会更改用户代理和其他详细信息)等。

如果您的API使用频繁,您可以从统计信息收集开始 - 它将在稍后付款。 在最糟糕的情况下,您需要一个数据科学家和编码人员团队来创建一个有效的,难以打破的防欺诈系统。

整个世界都在战争中: - )

P.S。我没有对授权的API调用(令牌等)说些什么,因为授权的API调用更容易捕获,我们在这里讨论的是无保护的REST查询

P.P.S。还有另一个指标,但您必须将其视为最后的手段:如果您的服务是国际性的,全球级的,但您有太多欺诈行为,比如虚构的Fraudistan,这种欺诈行为会损害您的业务,那么良好的流量就会带来好处利润,您应该阻止整个国家并发出通知,因此来自该国家的优质客户可以通过更严格的协议进行注册。

答案 1 :(得分:-1)

我同意@ strangeqargo的回答。如果您不想自己实现这一点,有几种服务可以分析请求并建议是否阻止它们,我已经有了ShieldSquare

的良好体验