【发布时间】: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