Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否可以防止黑客使用web控制台使用JavaScript反复调用upvote(AJAX)函数?_Javascript_Jquery_Ajax_Security_Code Injection - Fatal编程技术网

我是否可以防止黑客使用web控制台使用JavaScript反复调用upvote(AJAX)函数?

我是否可以防止黑客使用web控制台使用JavaScript反复调用upvote(AJAX)函数?,javascript,jquery,ajax,security,code-injection,Javascript,Jquery,Ajax,Security,Code Injection,我最近创建了一个网站,该网站具有使用jQuery的AJAX功能的投票/投票功能。问题是:任何人都可以投票。我不要求访问者登录,我不跟踪他们的IP,甚至不存储长期cookie。通常(不要笑),当用户投票时,我将他们投票的项目的ID存储在JavaScript数组中。每当他们尝试投票时,脚本都会通过检查数组中的ID来检查他们最近是否投票给了给定的项目。如果他们投票了,它只会给他们一个警告对话框。否则,它将进行投票。因此,不用说,用户再次投票所要做的就是刷新页面 我决定看看如果我注入一些JavaScri

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

我决定看看如果我注入一些JavaScript(在URL栏或web控制台中)会发生什么,我并不感到惊讶,因为我发现,快速地进行任意次数的投票非常容易:

for (var i = 0; i < 100; i++) { vote(itemID); }
for(var i=0;i<100;i++){vote(itemID);}
(这很好)。我不知道为什么数组没有阻止它,但这并不重要;利用它总是很容易的,对吗?我的意思是-你甚至可以用一些JS编写一个小HTML文档来调用我网站上的投票页面,你可以任意多次调用


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

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


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

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


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

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


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

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


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

除了这个评论,如果投票是重要的,你将不得不认真考虑上层数学,以确保反游戏措施俘获坏人。标准偏差,智能登录跟踪等。如果有什么东西可以通过垃圾邮件获得,你至少需要去数据库和用户系统。除了这个评论,如果投票是重要的,你将不得不认真考虑上层数学,以确保反游戏措施捕获坏人。标准差、智能登录跟踪等。如果通过垃圾投票有什么好处,至少需要访问数据库和用户系统。