REST API:使用 CAPTCHA 保护第一次通话有意义吗?

信息安全 Web应用程序 休息 验证码
2021-08-17 19:46:48

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

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

假设我有一个这样的 API 调用:https :
//myapi.example.com/register_user?username=UUU&password=PPP&email=EEE

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

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

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

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

它是关于以这样一种方式设计 API,即使从像手机这样的固有不安全客户端使用,它仍然没问题。基本上,即使 API 完全公开,也没有人能做错什么。所以这里的问题集中在保护第一个 API 调用,但它也是关于解决更普遍的问题。

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

那有意义吗?我是不是把事情复杂化了?

2个回答

对此的标准方法是向用户发送电子邮件以确认帐户,如果在预定义的时间段内没有发生这种情况,则删除注册。

您可以将其与一些异常检测结合起来,例如,如果您从单个 IP 地址获得大量注册,您可以假设这是恶意的并阻止该 IP 地址。对于坚定的攻击者并不完美,但可以阻止不那么坚定的攻击者。

您还可以在注册过程中添加诸如 CAPTCHA 之类的东西,这同样可以阻止不太确定的攻击者,但有很多方法可以绕过这些,例如相对便宜的 CAPTCHA 完成服务,因此确定的攻击者可以绕过它们。

其中哪些是合理的,很大程度上取决于您的应用程序的风险/威胁概况。

我认为这主要基于 API 设计的设计以及端点被滥用时影响的严重程度。如果您的其中一个子顺序调用可能会在系统被滥用时停止,我将制定 IT 策略或使用另一个 CAPTCHA 验证。无论如何,我只想指出,在您的示例中(可能是您的快速示例),将密码作为查询字符串发送并不是一个好习惯。如果启用了日志记录功能(即使使用 SSL),包括查询字符串的 URL 也可以作为纯文本记录在 Web 服务器上。