我有可能防止黑客使用网络控制台用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?
我最近创建了一个网站,该网站具有使用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来浏览你的网站。
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- node.js:setInterval()正在跳过调用
- 如何在单击复选框后调用控制器方法
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 使用Google Visualization动态调用构造函数
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 调用函数内部的函数
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- Javascript/jQuery中的并行Ajax调用
- 我有可能防止黑客使用网络控制台用JavaScript重复调用upvote(AJAX)函数吗