繁体   English   中英

从控制台阻止js攻击

[英]block js attack from console

我有一个打字测试的网站。 用户可以在登录后进行测试。 在测试结束时,它发送一个ajax并显示结果的准确性,每分钟按键,错误按键等。

在此输入图像描述

我注意到有人在我的网站上创建了一个帐户,并且他总是以每分钟2000或更多的密钥获得最高分。 我发现只做一件事就是ajax。 任何人都可以使用这样的新值从控制台面板运行ajax -

$.ajax({ // this is the main code we have to prevent
 type: 'POST',
 url: '/typingtest',
 //dataType: 'json',
 data:{
  "corrects":2000,
  "incorrects":0,
  "netwpm" : 2000,
  "FixedMistakes" : 0,
  "TotalEntries" : 20000,
  "ErrorRate" : 0,
  "RawSpeed" : 50000,
  "KeySpeed" : 50000,
  "CompleteWords" : 2000,
  "TotalTime" : 1,
  "accuracy" : 200,
  "ajaxSubmit" : "ajaxSubmit"
 },
 success: function(data) {
  window.location.href = data;
 },
 complete: function() {
  // Schedule the next request when the current one's complete
 }
});

他会得到这个结果 -

在此输入图像描述

我尝试使用一些标志变量来验证ajax页面。 但是使用js完成的任何事情仍然可以让任何人看到并轻松调试此过程以更改值。 最后他可以运行ajax。

有没有人想要防止这件事发生?

对于每分钟的单词,我建议:

在开始测试之前,请确保您的服务器端代码知道测试中有多少单词。 最好确保每次都有点随机。

在用户启动测试时向服务器发送请求,以获取测试开始时的时间戳。

在测试期间,计算成功完成的单词数。

然后在测试完成后再次发送成功完成的单词数以获得总的经过时间。 与服务器确认已完成单词的数量与最初给出的原始单词数相同,以确保没有人篡改该数字。

这样,客户端就不会跟踪任何无法验证的信息。


准确性有点难以验证,但只需确保设置最大值(准确度为200%绝对不可能!)。


此外,您可以通过混淆来尝试安全性(请参阅如何混淆(保护)JavaScript? ),但这不是最安全的方法,因为JavaScripters经验仍然可以知道发生了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM