3

我将把这篇文章分成几段,以便更容易地引用特定的内容。

  1. 我在 html 中制作了一个简单的按钮,每次按下按钮时都会加上一个 1 的数字。这个函数是用 Javascript 编写的。这个数字必须每 20 秒输入一次数据库。

  2. 由于 Javascript 在客户端运行,每个访问者都可以更改当前按下按钮的次数,然后该“假”数字将在 20 秒后发送到数据库。

  3. 用户不应更改此号码,因为这被视为作弊。

  4. 我可以使用其他语言来完成此操作,例如 java、flash 等,但我需要使其与在客户端运行的 Javascript/Jquery 一起工作。这样做的原因是,如果每次按下按钮时都向服务器发送请求,服务器会花费太多时间。

我希望你理解所有 4 个步骤,如果没有,请告诉我我将深化哪一步。

问题:如何在用户无法在其计算机上更改该号码的情况下,以一种安全的方式处理从客户端到数据库的号码?如果我不能,还有其他建议吗?

提前致谢。

4

2 回答 2

1

首先,您的计数器应该在您的服务器上。不要让客户端告诉您按钮被按下了多少次 - 自己将其存储在服务器上(没有人可以到达的地方)。

这意味着每次用户单击按钮时您都必须通知服务器。此外,您需要确保每次“点击”都是有效的。您可以通过为每个按钮单击附加一个唯一键来做到这一点。一旦用户单击按钮,该密钥将被发送到服务器并进行验证。如果有效,服务器将在下次单击按钮时返回要发送的新密钥。


您应该知道,编写一个简短的 jQuery 脚本来操作对 DOM 元素的点击非常容易。一个简单的命令

setInterval(function(){
  $('button').trigger('click');
},500);

每 500 毫秒(0.5 秒)触发一次按钮上的点击事件。

于 2013-03-26T12:33:59.600 回答
1

在 JavaScript 中运行的代码实际上无法防止“作弊”。您最好的选择可能是数据隐藏:

var myobj = (function() {
    var i = 0;

    return {
        function setI(newvalue) {
            // do checks here
            if (true) {
                i = newvalue;
            }
        },
        function sendI() {
            // send value of i
        }
    }
}());

myobj.setI(123);
myobj.sendI();
myobj.i // undefined

不过,将防止数据篡改的逻辑移动到服务器会更好。

于 2013-03-26T12:35:51.890 回答