我有可能防止黑客使用网络控制台用JavaScript重复调用upvote(AJAX)函数吗

Is it possible for me to prevent hackers from using a web console to call an upvote (AJAX) function repeatedly with JavaScript?

本文关键字:upvote 调用 AJAX 函数 JavaScript 有可能 黑客 控制台 网络      更新时间:2023-09-26

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

我决定看看如果我注入一些JavaScript(在URL栏或网络控制台中)会发生什么,我并不惊讶地发现,只要你想快速投票就可以很容易地进行:

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

(这很好)。我不知道为什么数组没有阻止它,但这并不重要;利用这一点总是很容易的,对吧?我的意思是,你甚至可以写一个带有JS的HTML文档,根据你的意愿多次调用我网站上的投票页面。

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

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

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

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

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