我在PHP中为我的网站制作了一个简单的星级评分功能,我的一般问题是,Cookie会阻止人们多次投票吗?
据我所知,我可以使用javascript和PHP存储cookie。有什么方法可以阻止垃圾邮件发送者测试该功能,查看保存的cookie,然后将其删除/添加到垃圾邮件攻击脚本中?
一个子问题是,我应该在cookie中保存什么?那个人已经投了票?什么防止垃圾邮件发送者在垃圾邮件攻击前自动删除所有Cookie?
到目前为止,我已经获得了蜜罐,按时间计算的密码和其他一些东西以及IP黑名单。
我会尽量避开验证码和重新接收。
答案 0 :(得分:2)
以下是这样的事实:在最糟糕的情况下,用户可能会得到一台全新的计算机来欺骗您的系统。你无能为力。因此,无论您拥有哪种客户端保护措施,都可能会被破坏。
唯一真正的方法是验证您的用户(即登录系统),并且只允许经过身份验证的用户进行投票。
请注意,如果您不关心偶尔的作弊行为,那么Cookie可能适用于95%的案例。如果必须不惜一切代价防止作弊,您需要一个身份验证系统。
答案 1 :(得分:1)
看起来你在谈论匿名/未经身份验证的用户(访客) - 因为如果它已经登录用户,你可以更容易地在服务器端进行验证(例如,使用Zanderwar对会话的回答)。
我相信你已经知道这条规则,但万一你不知道: 不要在客户端进行安全验证 - 您永远不知道用户正在使用哪种浏览器,移动设备或客户端。在现代客户端上剥离客户端验证,欺骗REST变量,编码/解码,重放事务等非常容易。所以不要在客户端进行安全验证。客户端验证应该仅用于增强用户体验,并且应该仅在服务器端进行适当的安全验证。
对于未经身份验证的匿名用户,我会按IP和时间限制提交。例如,每个IP,他们每小时只能提交一次。您必须在服务器端记录IP和时间并拒绝(或仅更新)过于频繁的提交。
这是我能想到的最简单的解决方案。
答案 2 :(得分:1)
无法使用Cookie或会话阻止垃圾邮件。你花在这个概念上的任何时候都会被完全浪费掉。
这并不意味着会话控制无效,但它本身不能阻止有经验的用户任何。
投票站点通常依赖于身份验证系统或客户端的IP和时间戳来限制用户。
答案 3 :(得分:1)
将浏览器字符串与IP一起使用会使其变得更难但是如果他们具有非常相似的设置(就像您在办公室中那样),则可能会阻止同一防火墙(同一IP)背后的多个人投票
除此之外,登录是另一种选择,但可以通过创建多个帐户来规避。
但是,除非您拥有访问者现有的经过验证的身份,否则防止多次投票总是一个问题。
答案 4 :(得分:1)
只要您让客人使用此功能,就不会在不使用Captcha或任何其他反机器人保护的情况下获得全面保护。
您可以做的最接近的是,如果他们在一定时间内投票太多,则会被User-Agent + IP阻止。
另一件事,您可以做的是使用JWT身份验证找到解决方法。它是客户端会话管理的一个很好的工具。
此外,您可以尝试并实施CSRF protection。例如,您可以在加载投票页面时创建唯一令牌,当用户点击其中一个星标时,系统会将此令牌与投票评级一起发送。
但是,再一次,没有针对您的问题的防弹解决方案。