![](/img/trans.png)
[英]Can a JS script block a whole server? If so, how can I possibly get rid of this attack?
[英]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.