【问题标题】:REST API from mobile app - Does securing the first call with a CAPTCHA make sense?来自移动应用程序的 REST API - 使用 CAPTCHA 保护第一次通话有意义吗?
【发布时间】:2014-10-02 12:51:13
【问题描述】:

假设我有一个 iOS/Android 应用程序,它依赖于自定义 REST API 来处理诸如帐户管理(注册、登录、密码重置、获取/设置用户相关数据)之类的事情。

没有什么好的方法可以保证我的 API 只从我的移动应用程序中调用。 Oauth2 等在客户端代码中带有“秘密” - 可以很容易地进行逆向工程。

假设我有一个这样的 API 调用:

https://www.myapi.com/register_user?username=UUU&password=PPP&email=EEE

(当然,不完全一样,但你明白了)

这会创建一个新用户,然后所有 API 调用都将包含会话令牌或将 API 调用与具有帐户的特定应用用户联系起来的东西。

第一次注册调用是唯一一个不受任何保护的调用,我担心的是恶意人员从 PC 脚本调用它 1,000,000 次以创建大量虚假用户,尤其是使用真实用户电子邮件地址。拥有这些地址的人将无法使用该应用。

那么如何保护第一个 API 调用以防止大规模滥用?我正在考虑在用户注册表单中包含一个经过服务器验证的移动友好验证码。

同样,所有后续 API 调用都受到会话令牌的保护,并且每个用户都监控 API 调用计数(可疑调用被阻止)。

这有意义吗?我是不是把事情复杂化了?非常感谢

PS:似乎其他有趣的选择包括使用电子邮件验证或可靠的第三方身份提供商(如 Google 等)——这三个选项都不是完美的。无论如何,有兴趣围绕这个问题进行讨论。

【问题讨论】:

  • 所以这不是关于保护对 API 本身的访问,而是关于保护注册过程?如果您担心有人使用不属于他们的现有电子邮件地址进行注册 - 那么请实施电子邮件验证系统,其中首先将确认电子邮件发送到该电子邮件地址。
  • 嗯,它是关于以这样一种方式设计 API,即使从像移动设备这样的固有不安全客户端使用,它仍然没问题。基本上,即使 API 完全公开,也没有人能做错什么。所以这里的问题集中在“保护”第一个电话,但它是关于“解决”一个更普遍的问题。
  • 您认为 OAuth2 并没有解决这个“更普遍的问题”?
  • 从我读到的所有内容,而不是从不安全设备(如手机)上的二进制文件访问时被盗。然后任何人都可以伪装成我的应用程序调用我的 API。 stackoverflow.com/questions/7623335/…
  • 您对此问题的最终解决方案是什么?

标签: ios api security rest captcha


【解决方案1】:

我建议将 CAPTCHA 作为第二级保护,以便在您看到滥用注册时启用。这里有几个不同的角度:

1。您的应用是否需要这种保护?

除非您在帐户被请求时立即分配昂贵的资源,否则所发生的一切就是正在创建一堆数据库记录。如果您要立即分配资源,那么您需要更改入职流程,以便用户只有在他们合法地验证其电子邮件并登录到应用程序后才能获得这些资源。您可以单独进行清理工作,以便从数据库中删除所有在合理期限(可能是两周?)内未激活的请求。

2。您是否对注册进行了实时监控?

如果您可以随时掌握注册 API 调用,则可以防止大多数滥用行为。大多数时候,您都在尝试提高注册新用户的数量。通过监控/警报,您可以在注册行为开始看起来可疑时采取防御措施。例如:

  • API 调用突然大幅飙升,而您没有任何触发(例如新的营销活动或博客文章)
  • 来自单个 IP 或 IP 范围的注册尝试过多
  • 在 HTTP 请求标头中观察相同的值(假设您的应用执行的 API 调用传递了一些特定于客户端的值并且不使用静态请求标头)

3。防止滥用选项

正如我在开始时所说,CAPTCHA 可以是第二级,第一级是为注册请求提供限制功能。对于来自同一 IP 的每次新注册尝试,您可能会以指数方式花费更长的时间来响应。在观察到太多尝试并且响应时间已经足够长后,您可以开始要求验证码。

希望在这个阶段,您可以控制滥用行为。但是,如果 CAPTCHA 没有给出您期望的结果,也要准备好开始阻止/暂时禁止 API 调用。

顺便说一句,这个和大多数其他反滥用功能将受益于能够即时配置您的服务,在观察和分析效果的同时使用不同的值/选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 2016-05-23
    • 2015-02-26
    • 2020-09-13
    • 2014-05-23
    • 2016-11-13
    • 2020-04-19
    • 2012-05-27
    相关资源
    最近更新 更多