我有一个应用程序,用户可以添加评级,我不希望他们必须注册才能这样做,但我也不希望机器人能够轻松地评分。
有没有一种方法可以合理(不一定是100%,但我不想使用反应性启发式方法)确保我的用户是人类? 没有需要任何类型的CAPTCHA /登录/其他操作。通常我会说这是不可能的,但由于我的应用程序在Android上运行,我认为我们可以做得比没有好。
我的第一个想法是从AccountManager
获取他们的gmail地址,但我看不到验证他们拥有该电子邮件地址的方法 - 即机器人可以只将已发送的电子邮件发送到我的服务器,所以我认为这不起作用(我不想让他们使用他们的谷歌帐户验证我的应用程序;他们不太可能这样做。)
我的下一个想法是使用Google的云消息传递。我可以从设备获取云消息ID,将其发送到我的服务器,从服务器发送随机云消息回设备,然后将该消息发送回服务器。我认为这至少会验证他们确实有一个带有Gmail帐户的Android设备,这已经足够了。
当然我可以向他们发送短信,但这需要钱和无缝意味着我需要获得阅读他们的消息的权限,我真的想避免(特别是评级是可选功能)
也许有可能使用Licensing Verification Library获得Google签署的用户从市场上下载的保证,但由于我的应用程序的性质,我无法将其投放市场。< / p>
当然我不能用这些。机器人可以组成它们!
所以GCM看起来是最好的(也是唯一的)选择。谁能想到别的什么?
答案 0 :(得分:0)
随机显示一些弹出窗口并将其关闭按钮放在不同的位置,因此用户必须关闭它们。
OR
使用拖放API要求用户将按钮拖放到屏幕上的某个区域,然后提交评级。您可以随机放置按钮。
可以有多个位置,你可以拖动按钮,但你可以指示用户输入正确的按钮。
答案 1 :(得分:0)
当您控制通信的两个方面时,您可以执行以下操作:
您可以使用任何对称加密技术。一个非常简单的例子是在App端使用秘密令牌对您的消息进行异或(即投票)。在服务器端再次使用相同的秘密令牌再次给出明文消息。
只要攻击者不知道您的加密方法,此方法就是安全的。如果知道它当然可以模拟应用程序的请求,但它适用于每个方法,所以你可能应该使用比简单的异或更好的东西。