如何防止来宾用户为 post 投票两次?
How to prevent guest users from voting twice for a post?
我有一个网站,用户可以在其中 post 并为 post 投票。允许来宾用户投票给一个 post 非常关键,避免同一来宾多次投票也很重要。
Cookies,很容易删除,所以这不是解决办法。
IP,如果你考虑NAT情况就很糟糕了。
所以我想,我需要更高级的方法,也许其他类型的 cookies..?
如果有人在类似情况下有经验,请帮助。
是的,唯一半完美的解决方案是跟踪 IP 地址。您可以将它们永久存储在 table 中,或者将它们缓存在 Memcache 或类似设备中一段时间。当然,如果用户已登录,最好的方法是简单地检查用户是否已经投票。
会话和 Cookie 是无用的,因为可以简单地编写一个忽略会话数据的自动投票算法。
如果用户是匿名用户且无需进行身份验证,则无法阻止。
如果有人真的想多次投票,用户可以在另一台设备上打开页面并再次投票,即使您可以用一种永久性 cookie 识别 his/her 设备。
您似乎已经预料到会有用户删除他们的 cookie 以便能够再次投票。你无法阻止他们,但你可以让它变得更难。
对于未登录的用户,您唯一能做的就是尽可能地让他们难以进行第二次投票。例如,您可以:
在客户端:
- 设置 cookie
- 将信息写入浏览器存储
- 使用所谓的 flash cookies
在服务器端 - 尽可能多地存储和检查有关用户的信息:
- 存储用户ip(包括代理ip等)
- 存储浏览器指纹
- 存储用户时区
- 阻止对此 ip 和浏览器指纹的投票(永久或一段时间)。
等等
但你还是挡不住聪明,真的想骗取匿名用户的投票。
因此,不尝试阻止投票而是检测并忽略 "duplicate" 投票可能更有用(即可以考虑在特定时间段内从相同的 ip 和浏览器组合对相同的选项投票"cheated").
我有一个网站,用户可以在其中 post 并为 post 投票。允许来宾用户投票给一个 post 非常关键,避免同一来宾多次投票也很重要。
Cookies,很容易删除,所以这不是解决办法。
IP,如果你考虑NAT情况就很糟糕了。
所以我想,我需要更高级的方法,也许其他类型的 cookies..?
如果有人在类似情况下有经验,请帮助。
是的,唯一半完美的解决方案是跟踪 IP 地址。您可以将它们永久存储在 table 中,或者将它们缓存在 Memcache 或类似设备中一段时间。当然,如果用户已登录,最好的方法是简单地检查用户是否已经投票。
会话和 Cookie 是无用的,因为可以简单地编写一个忽略会话数据的自动投票算法。
如果用户是匿名用户且无需进行身份验证,则无法阻止。
如果有人真的想多次投票,用户可以在另一台设备上打开页面并再次投票,即使您可以用一种永久性 cookie 识别 his/her 设备。
您似乎已经预料到会有用户删除他们的 cookie 以便能够再次投票。你无法阻止他们,但你可以让它变得更难。
对于未登录的用户,您唯一能做的就是尽可能地让他们难以进行第二次投票。例如,您可以:
在客户端:
- 设置 cookie
- 将信息写入浏览器存储
- 使用所谓的 flash cookies
在服务器端 - 尽可能多地存储和检查有关用户的信息:
- 存储用户ip(包括代理ip等)
- 存储浏览器指纹
- 存储用户时区
- 阻止对此 ip 和浏览器指纹的投票(永久或一段时间)。
等等
但你还是挡不住聪明,真的想骗取匿名用户的投票。
因此,不尝试阻止投票而是检测并忽略 "duplicate" 投票可能更有用(即可以考虑在特定时间段内从相同的 ip 和浏览器组合对相同的选项投票"cheated").