移动设备上的Captcha替换

时间:2016-07-05 04:36:05

标签: android ios security captcha hmac

我们提供用户可以注册的服务。此过程受reCAPTCHA保护,以防止自动注册。问题是在移动设备上reCAPTCHA不方便。因此,我们认为注册API还会接受一些特殊的令牌,而不是reCAPTCHA响应。

现在的问题是如何实现这个令牌。我们的第一种方法是为移动应用程序配备一些将作为令牌发送到服务器的常量秘密。但是,如果黑客将请求重定向到他的服务器(通过更新API域的DNS记录并将其证书安装为移动设备的可信任),则可以揭示此秘密。

现在我们的最后一种方法是将用户名+密码上的令牌计算为HMAC-SHA1(我们是否需要在这里使用secred - 也许只是为了让输入足够长?)。用户名将从注册输入中获取。然后服务器将通过验证散列来授权它。在他的情况下,可以进行重播攻击但是没有问题,因为重复的用户名将被拒绝。

这种做法是否正确?也许在移动设备上还有其他替代验证码?

考虑到它将托管在Appstore中并提取密钥(和秘密),还可以从iOS(ipa文件)获取和反向设计应用程序吗?

如果是android,这是可能的 - 有没有办法阻止它?

2 个答案:

答案 0 :(得分:0)

您发现了一个缺点:您仍然使用不会因同一用户而更改的令牌。在你的用例(注册)中没问题,但是可能存在另一个无用的用例(例如密码恢复功能。在这种情况下,可能的黑客可能会为任何用户生成有效的令牌,因为你要求用户名)。

我的解决方案是:

  • 创建一个算法(在移动应用和后端),它采用“公共令牌”并创建一个“秘密令牌”,它解决了验证码。它可能是一个简单的SHA1哈希(我不推荐),公共令牌和盐,用户ID和公共令牌之间的组合等......
  • 在API上创建一个生成公共和秘密令牌的端点。将秘密令牌存储在后端并将公共令牌返回给客户端(移动应用程序)。
  • 然后你的应用应该要求公共令牌,生成秘密令牌并将其发送到API。 API验证秘密令牌已存储在您的数据库中,如果是这种情况,则验证验证码。

改进将使存储的秘密令牌在X秒后过期。

希望它有所帮助!

答案 1 :(得分:0)

我们决定与Hawk一起不通过电汇发送凭据。它将用于iOS,它不应该对应用程序进行反向工程并获取密钥。对于Android,我们会为Android使用一些reCAPTCHA库。