ios - 来自移动应用程序的 REST API - 使用验证码保护第一次通话是否有意义?

标签 ios api security rest captcha

假设我有一个 iOS/Android 应用程序,它依赖于自定义 REST API 来进行帐户管理(注册、登录、密码重置、获取/设置用户相关数据)等操作。

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

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

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

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

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

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

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

同样,所有后续的 API 调用都受到每个用户监控的 session token 和 API 调用计数的保护(可疑的调用被阻止)。

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

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

最佳答案

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

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

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

2。你们有注册的实时监控吗?

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

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

3。滥用预防选项

正如我在开头所说,CAPTCHA 可以是第二级,而第一级是为注册请求提供限制功能。对于同一 IP 的每次新注册尝试,您的响应时间可能呈指数级增长。在观察到太多尝试并且响应时间已经足够长之后,您可以开始询问验证码。

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

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

关于ios - 来自移动应用程序的 REST API - 使用验证码保护第一次通话是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25213699/

相关文章:

php - BBP : How to secure database ids in a messaging system?

javascript - 在 Firefox 和谷歌浏览器上复制到剪贴板

iphone - ABAddressBookGetGroupCount 没有给出正确的计数

api - 使用 OAuth 和 PEAR Services_Twitter 获取 Twitter 请求 token 时出错

ios - 重新加载前删除表行

api - 如何在 Elastic Search 中处理 "private"数据

c# - 用于开发和生产的 .NET Core API 条件身份验证属性

security - 从企业到 Windows Azure 的 VPN 连接

ios - 如何调试 SIGABRT 和 NSLayoutConstraint 常量不一致的崩溃不是有限的!这是非法的。常量 :nan

ios - 获取 UICollectionViewCell 类中的 IndexPath 值