javascript - 我是否有可能阻止黑客使用 Web 控制台使用 JavaScript 重复调用 upvote (AJAX) 函数?

标签 javascript jquery ajax security code-injection

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

我决定看看如果我注入(inject)一些 JavaScript(在 URL 栏或 Web 控制台中)会发生什么,我并不感到惊讶地发现可以非常快速地任意多次投票非常简单:

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

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

所以我想不费吹灰之力地解决这个问题。是否可以在 JavaScript 中创建不可变变量?一个常量(尽管如果有一个只能改变一次的常量这样的东西真的会有帮助)?在某种程度上解决这个问题的最简单方法是保持 ID-holding 数组半恒定:不能删除,但可以添加。非常感谢任何建议或解决方案或解释。

最佳答案

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

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

关于javascript - 我是否有可能阻止黑客使用 Web 控制台使用 JavaScript 重复调用 upvote (AJAX) 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12170375/

相关文章:

javascript - 如何让 Wii Remote 与 Three.js 通信?

jquery - 循环内 keydown 上的事件监听器会触发一次,但除非重新启动循环,否则不会再次触发。为什么?

javascript - 如何使用ajax从php返回javascript对象

php - 他们是怎么做到的呢?动态加载页面/网站......框架,脚本? PHP、jQuery、 ruby ?

javascript - 如何在 Angularjs 中的主详细信息中设置唯一值

javascript - 测试传递给 Angular Material Dialog 实例的 Controller

javascript - jQuery Collapser 隐藏或显示 DIV 内的内容

javascript - 如何删除谷歌图表中的工具提示

php - Symfony 5 - 使用 json_login 登录;登录过程不工作;

javascript - 如何跳转到不同 fullpage.js 滚动部分之间的 #id anchor ?