1

我最近创建了一个网站,该网站具有使用 jQuery 的 AJAX 功能的投票/投票功能。问题是:任何人都可以投票。我不要求访问者登录,我不跟踪他们的 IP,我什至不存储长期 cookie。通常(不要笑),当用户对某事进行投票时,我会将他们投票的项目的 ID 存储在 JavaScript 数组中。每当他们尝试投票时,脚本都会通过检查数组中的 ID 来检查他们最近是否为给定项目投票。如果他们有,它只会给他们一个警告对话框。否则,它会投票。所以不用说,用户再次投票所要做的就是刷新页面。

我决定看看如果我注入一些 JavaScript(在 URL 栏或 Web 控制台中)会发生什么,我并不感到惊讶地发现快速投票多次就像你想要的一样简单:

for (var i = 0; i < 100; i++) { vote(itemID); }

(这很好)。我不确定为什么阵列没有停止它,但这没关系;利用这一点总是很容易的,对吧?我的意思是——你甚至可以用一些 JS 编写一个小的 HTML 文档,它可以根据需要多次调用我网站上的投票页面。

所以我想在没有太多麻烦的情况下解决这个问题。是否可以在 JavaScript 中创建不可变变量?一个常数(尽管如果有一个常数只能改变一次,那真的很有帮助)?在某种程度上解决此问题的最简单方法是保持 ID 保持数组为半常数:不能删除,但可以添加。非常感谢任何建议或解决方案或解释。

4

2 回答 2

4

不,如果用户想通过弄乱他们的客户端代码来作弊,他们可以这样做。这就像游戏的作弊补丁一样。

你现在做的事情是非常合理的,可以避免意外重复投票,如果你觉得这还不够(例如如果投票真的很重要),你需要在服务器端采取措施。跟踪 IP 或设置 cookie 也不起作用,这也依赖于客户端的合作。您必须对用户进行身份验证,并通过在数据库中存储一些内容来确保每个人只投票一次。

于 2012-08-29T03:11:57.323 回答
2

不知道你为什么不跟踪IP,如果你跟踪IP,那么你可以检查IP之前是否投票过相同的项目,或者IP投票是否过于频繁。

当然,您还需要考虑到人们可能会共享相同的 IP 来浏览您的网站。

于 2012-08-29T03:18:06.713 回答