验证Android用户是否为人(没有CAPTCHA)

时间:2012-10-18 12:49:41

标签: android captcha bots spam google-cloud-messaging

我有一个应用程序,用户可以添加评级,我不希望他们必须注册才能这样做,但我也不希望机器人能够轻松地评分。

有没有一种方法可以合理(不一定是100%,但我不想使用反应性启发式方法)确保我的用户是人类? 没有需要任何类型的CAPTCHA /登录/其他操作。通常我会说这是不可能的,但由于我的应用程序在Android上运行,我认为我们可以做得比没有好。

Gmail地址。

我的第一个想法是从AccountManager获取他们的gmail地址,但我看不到验证他们拥有该电子邮件地址的方法 - 即机器人可以只将已发送的电子邮件发送到我的服务器,所以我认为这不起作用(我不想让他们使用他们的谷歌帐户验证我的应用程序;他们不太可能这样做。)

GCM

我的下一个想法是使用Google的云消息传递。我可以从设备获取云消息ID,将其发送到我的服务器,从服务器发送随机云消息回设备,然后将该消息发送回服务器。我认为这至少会验证他们确实有一个带有Gmail帐户的Android设备,这已经足够了。

SMS

当然我可以向他们发送短信,但这需要钱和无缝意味着我需要获得阅读他们的消息的权限,我真的想避免(特别是评级是可选功能)

Android许可服务器

也许有可能使用Licensing Verification Library获得Google签署的用户从市场上下载的保证,但由于我的应用程序的性质,我无法将其投放市场。< / p>

设备ID,EMEI,电话号码等

当然我不能用这些。机器人可以组成它们!

所以GCM看起来是最好的(也是唯一的)选择。谁能想到别的什么?

2 个答案:

答案 0 :(得分:0)

随机显示一些弹出窗口并将其关闭按钮放在不同的位置,因此用户必须关闭它们。

OR

使用拖放API要求用户将按钮拖放到屏幕上的某个区域,然后提交评级。您可以随机放置按钮。

可以有多个位置,你可以拖动按钮,但你可以指示用户输入正确的按钮。

答案 1 :(得分:0)

当您控制通信的两个方面时,您可以执行以下操作:

流量

  1. 应用程序:从服务器请求一次性密钥令牌。
  2. 服务器:创建一次性密钥令牌和跟踪ID,并将两者发送到应用程序,同时使用tracking-id跟踪秘密令牌。
  3. 应用:使用一次性密钥令牌加密投票(请参阅下面有关加密的内容)
  4. App:将加密邮件和tracking-id发送到服务器。
  5. 服务器:使用tracking-id查找机密令牌,确保它尚未使用并使用机密令牌解密投票。
  6. 加密

    您可以使用任何对称加密技术。一个非常简单的例子是在App端使用秘密令牌对您的消息进行异或(即投票)。在服务器端再次使用相同的秘密令牌再次给出明文消息。

    只要攻击者不知道您的加密方法,此方法就是安全的。如果知道它当然可以模拟应用程序的请求,但它适用于每个方法,所以你可能应该使用比简单的异或更好的东西。