【问题标题】:Captcha substitution on mobile devices移动设备上的验证码替换
【发布时间】:2016-08-18 00:32:22
【问题描述】:

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

现在的问题是如何实现这个token。我们的第一个方法是为移动应用程序配备一些将作为 token 发送到服务器的恒定秘密。但是,如果黑客将请求重定向到他的服务器(通过更新 API 域的 DNS 记录并将他的证书安装为受信任的移动设备),这个秘密就会被泄露。

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

这种方法正确吗?也许在移动设备上还有其他替代验证码的方法?

考虑到它将托管在 Appstore 中并提取密钥(和秘密),是否可以从 iOS(ipa 文件)获取应用程序并对其进行逆向工程?

在 android 的情况下这是可能的 - 有没有办法防止它?

【问题讨论】:

    标签: android ios security captcha hmac


    【解决方案1】:

    您发现了缺点:您仍然拥有不会为同一用户更改的令牌。在您的用例(注册)中没问题,但可能还有其他无用的用例(例如密码恢复功能。在这种情况下,可能的黑客可能会为任何用户生成有效令牌,而您正在询问用户名)。

    我的解决方案是:

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

    一项改进是让存储的秘密令牌在 X 秒后过期。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      我们决定使用Hawk 不通过网络发送凭据。它将用于无法对应用程序进行逆向工程并获取密钥的 iOS。对于 Android,我们将使用一些用于 Android 的 reCAPTCHA 库。

      【讨论】:

        猜你喜欢
        • 2013-10-14
        • 2019-11-06
        • 1970-01-01
        • 2011-12-28
        • 2011-01-29
        • 1970-01-01
        • 2011-10-27
        • 2019-11-18
        • 2018-04-15
        相关资源
        最近更新 更多