【问题标题】:How can I prevent bots and spam API requests?如何防止机器人和垃圾邮件 API 请求?
【发布时间】:2019-01-04 09:46:08
【问题描述】:

我正在使用 react-native 开发 Android 应用,并且该应用与我正在为该应用开发的 API 进行通信。该 API 是使用 Laravel 和 Laravel Passport 构建的。

我知道 Android 应用程序可以反编译,因此可以轻松找到存储在应用程序中的任何密钥。这就是我目前采用这种方法的原因。

您只能在注册期间获得访问代码。该应用程序使用匿名帐户,因此如果您丢失了访问令牌,那就太糟糕了。该应用程序向 /api/register 发出 API 请求,该请求创建帐户并返回访问令牌。该应用程序将存储令牌并使用它来发出进一步的 API 请求。

问题在于注册路由不使用任何客户端机密或访问令牌。自动化路由请求并创建机器人大军非常容易。我可能会像许多 API 提供商那样限制请求的数量,但这并不能解决问题。

我听说过有效载荷散列,但这通常需要应用程序和 api 中的盐。同样,这是不安全的,如果有人知道垃圾邮件请求的盐分,就不能自己散列吗?也许我误解了有效载荷哈希的工作原理。

希望有人可以提供帮助。

【问题讨论】:

  • 什么会发布到注册路径以创建帐户?
  • @J.Doe 是的,这将有助于处理相当数量的垃圾邮件,但对机器人攻击没有多大作用。
  • @DigitalDrifter 什么都没有。该路由会创建一个 guid 作为您的帐户名称。

标签: javascript php android laravel react-native


【解决方案1】:

您可能想要使用一些东西来检测用户代理是否命中了路由。这个包有很多有用的功能:jenssegers/agent。例如,它提供爬虫检测:

$agent->isRobot();

根据您的托管服务提供商,您可能有权使用在每分钟 X 次请求(或其他指标)后自动将 IP 地址列入黑名单的工具。我知道 AWS 提供这项服务。

另一个选项是antonioribeiro/firewall。根据 IP 或地理位置跟踪用户并相应地重定向/阻止。

【讨论】:

  • 这些都是很棒的建议,我们会去看看。但是,两者都没有真正阻止我发出 curl 请求并创建一个帐户以定期发布垃圾邮件(例如为恶意网站做广告)。我想在一天结束的时候,不管你采取了多少措施来阻止它,总有人会找到一种方法来做这样的事情。由于 VPN 的原因,禁止 IP 并不是那么有效,但肯定会有所帮助。
  • 我不知道是否可以主动阻止以您想要的方式向广泛开放的端点发出请求。如果没有某种全面的列表来识别不良行为者,您怎么能知道确切地提出了请求?我知道这样做的唯一方法是要求一些标识符,无论是电子邮件地址、facebook id、SSN 等,然后您可以查找并查看他们之前是否已注册。您是否有任何示例站点/api 允许与您的流程类似的注册?
  • 我使用了一些看起来类似的应用程序,但它们在幕后做了什么 - 我不确定。我可能想得太远了,因为我还没有现实世界的问题。你所说的加上recaptcha(我发现应该可以实现)和速率限制的组合暂时应该足够了。然后,我可以在问题出现时考虑解决问题。
【解决方案2】:

我现在就在这个路口,我要走的路线是让用户解决一个简单的难题:

  1. 应用/网络上的注册过程收到来自我的注册服务器的挑战
  2. 通过输入字段向用户显示挑战:电子邮件/用户名、密码和挑战的答案输入
  3. 全部发送到注册服务器,如果答案不正确,则拒绝注册

这个“你是人类吗”挑战将阻止机器人注册,因此它需要比编写机器人代码更聪明一些,因此在服务器上选择各种挑战会很好。 我正在考虑“从下拉列表中选择第 n 个值”、“选择第一个/最后一个选项”、“写下颜色‘蓝色’”或“3 到 5 之间的整数”等等,对于哪些变量可以很容易地由服务器生成,挑战和答案输入可以很容易地通过注册脚本创建,并且用户解决起来很容易且不会很耗时。

我将探讨的另一个选项是通过 IP 限制请求,并结合黑白名单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2021-08-19
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多