2

如何识别评论或文章的重复投票或评分?例如,当您对评论进行投票时,您不能再对该评论进行投票。

我希望用户可以对评论进行投票,这个增量即将保存在数据库中,唯一要保存的是数据库中正票和负票的增量。所有访问者都可以对评论进行投票,每个人只能投票一次。

有客户端解决方案吗?

4

4 回答 4

2

基于 cookie 或 localStorage 的客户端解决方案将覆盖一个使用单个浏览器的诚实用户,这是大多数情况(所以你不妨这样做)。它根本不会做任何事情来防止任何具有恶意和任何技术知识的人的欺诈,因此您还需要在信任边界的另一侧(在服务器上)进行检查。

一个坚定的攻击者能够填满投票箱,但你有一些选择来劝阻随意滥用。

正如其他人所提到的,一种简单的解决方案是允许每个 IP 地址投一票。这不是一个糟糕的主意,但请参阅此讨论以了解为什么它也不是一个好主意:每个 IP 地址限制 1 票?它可以阻止合法用户投票(考虑两个室友共享个人路由器),并且不会阻止选票填充(我可以在家里投票,然后在工作中再次投票)。当您考虑像 AOL 这样经常重新分配地址(表面上可能是为了保护其用户的隐私)的 ISP 时,它变得更加复杂(至少流行的观点是,我只是假设这仍然是正确的)。

您可能需要验证码。这提供了与需要经过验证的电子邮件地址类似的保护,而您的用户负担稍轻。当然,这些方法都不是保证。任何拥有域名的人都有无数个唯一的工作电子邮件地址,如果几十张选票足以影响投票结果,那么攻击者只需要耐心进行几十次验证码测试。

更复杂的解决方案是要求用户帐户,巧妙地观察滥用迹象,并禁止涉嫌欺诈的帐户。不过,我猜这远远超出了你准备做的任何事情的范围。除非也许有人已经发布了这种东西的免费通用实现?

于 2012-11-28T07:11:27.433 回答
1

用户可以在他的浏览器中禁用 JavaScript,删除 cookie 并轻松绕过您的识别。这不是最好的解决方案。除此之外,最好在服务器端添加检查用户IP地址。

于 2012-11-28T06:31:50.677 回答
0

我认为 cookie 不是限制投票的好方法。您可以清除它们并再次投票。可能最好的方法是只允许注册用户投票,然后在每篇文章的某个存储位置跟踪他们。当有人尝试投票时,请检查文章的“为此投票的用户”数组,如果他们不在其中,请允许投票通过。

于 2012-11-28T06:27:11.853 回答
0

好的。另一个不好的做法。只是试图愚弄一个匿名选民。当他第一次投票时 - 写入您的 DB +1 和一个带有当前匿名用户额外投票量的 cookie。当他再次投票时,只需将 +1 添加到 cookie 数量,而不是添加到您的数据库并更新 UI。所以,用户不知道他不能多次投票,也不要试图清除他的 cookie 或其他东西。当然,您不能将这种方法用于任何比赛,仅用于统计。在您的情况下,您不应该为注册用户设置此 cookie 并使用标准方法来检查他们的投票。

于 2012-11-28T07:53:08.283 回答