2

我有一个应用程序,用户可以在其中添加评分,我不希望他们必须注册才能做到这一点,但我也不希望机器人很容易游戏评分。

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

邮箱地址。

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

GCM

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

短信

当然,我可以向他们发送 SMS,但这需要花钱,而且无缝意味着我需要获得阅读他们消息的权限,而我真的很想避免这种情况(特别是因为评级是一个可选功能)。

Android 许可服务器

也许可以使用许可验证库从谷歌获得用户从市场上下载它的签名保证,但由于我的应用程序的性质,我无法将其投放市场。

设备ID、EMEI、电话号码等

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

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

4

2 回答 2

0

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

流动

  1. 应用程序:从服务器请求一次性秘密令牌。
  2. 服务器:创建一次性秘密令牌和跟踪 ID,并将两者发送到应用程序,同时使用跟踪 ID 跟踪秘密令牌。
  3. 应用程序:使用一次性秘密令牌对投票进行加密(有关加密,请参见下文)
  4. 应用程序:向服务器发送加密消息和跟踪 ID。
  5. 服务器:使用 tracking-id 查找秘密令牌,确保它尚未被使用并使用秘密令牌解密投票。

加密

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

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

于 2012-10-19T12:45:49.597 回答
0

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

或者

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

可能有多个地方可以拖动按钮,但您可以指示用户放入正确的按钮。

于 2012-10-18T13:51:24.867 回答