以匿名方式防止单个用户进行多次投票

Preventing Multiple Votes from a single user, with anonymity

我有一个 Android 应用程序,它允许用户通过我有代码的 java 网络服务器 post 信息到数据库。

允许用户 up/down 投票 post。如何防止同一用户在同一 post 上多次投票?

我的一些想法:

  1. 通过为 post ID 唯一密钥添加本地存储 "key" 在本地禁用。例如,当用户投票赞成或反对时。它在用户的本地存储上写入一个密钥,其中包含投票类型和 post 的唯一标识符的信息。 这有很多选票可行吗?它会导致任何类型的硬盘驱动器 consumption/lag?

  2. 在应用程序安装时生成的用户 phone 上存储唯一生成的密钥。此密钥将提交给数据库中的新 table,该数据库将 post 与选票和 "user-key".

  3. 相关联

如果您希望获得大量信息,数据库可能是最佳选择。显然这将使用存储 space,但不会太多。根据我的经验,写入数据库的速度往往非常快。

唯一键也可以正常工作。这种方式会更安全(取决于您的操作方式),因为从客户端欺骗它会更难。如果您根据用户的 Google 帐户或设备 ID 生成密钥,则情况良好。如果您通过某种伪随机方法进行操作,那么用户仍然可以通过清除应用程序数据并获取新密钥来进行多次投票。

如果防止多次投票真的很重要,请在服务器上进行。如果它不是特别重要,请使用您认为更容易的方法。您也可以考虑同时执行这两种操作,以达到两全其美的目的:在重复投票尝试时立即向用户反馈(或者只是更改 UI 以使其不可能),以及在服务器上进行备份验证以防万一用户试图绕过客户端检查。