我需要一个坚实的倒数计时器来进行一场奇怪的比赛,这不容易被黑客攻击。
我试图创建自己的计时器,但我觉得这太容易被黑客攻击了:
var counter = 10;
var timer = null;
function countdown(){
if (counter == 10) {
$(".time_box").html(counter);
}
if (counter <= 0) {
stopInterval();
}
else {
counter--;
$(".time_box").html(counter);
}
}
function reset() {
clearInterval(timer);
counter=0;
}
function startInterval() {
$(".time_box").html(counter);
timer= setInterval("countdown()", 1000);
}
function stopInterval() {
clearInterval(timer);
}
有关安全改进的任何想法吗?
答案 0 :(得分:1)
Javascript实际上并不是安全的地方,但我可以提出一个建议来降低用户介入的风险,就是封装你的代码,使其无法在对象之外进行修改。
例如,目前我只需在浏览器控制台中运行以下内容即可获得额外的时间:
counter = -99999
但是,如果你要封装你的逻辑,以便counter
不被曝光,那么这是不可能的。
var MyFunction = function(){
var counter = 10;
var timer = null;
function countdown(){
if (counter == 10) {
$(".time_box").html(counter);
}
if (counter <= 0) {
stopInterval();
}
else {
counter--;
$(".time_box").html(counter);
}
}
function reset() {
clearInterval(timer);
counter=0;
}
function startInterval() {
$(".time_box").html(counter);
timer= setInterval(countdown, 1000);
}
function stopInterval() {
clearInterval(timer);
}
return {
startInterval: startInterval
}
}();
然后调用以下内容开始倒计时:
MyFunction.startInterval();
现在,在浏览器控制台中调用counter
将无效,MyFunction.counter
也不会。