防止客户端滥用/欺骗重复用户奖励的Ajax呼叫

时间:2015-03-09 13:05:29

标签: javascript php jquery ajax

我正在制作一个硬币计划,以奖励会员在我的网站上。我的程序制作了两个随机数并比较它们,如果它们相同,你得到一枚硬币。我遇到的问题是有人可以进入控制台并免费获得#34;硬币。他们也可以通过打开更多标签或制作程序来生成更多硬币而作弊,我正试图阻止它们。我正在考虑将它从js转换为php以停止作弊(大部分)但我不知道如何做到这一点。有问题的代码是:

$.ajax({
    type: 'post',
    url: '/version2.0/coin/coins.php',
    data: {Cid : cs, mode : 'updateCoins'},
    success: function (msg) {
        window.msg=msg;
    }});

控制台的代码是围绕它的循环。在上面的代码中," cs"是会员的身份,所以用他们的身份取代会让他们得到他们想要的所有钱币。

我是否应该在其上方添加变量?但是,我将如何显示具有当前硬币数量的成功消息。此外,此代码位于setInterval函数中,每15毫秒重复一次。

1 个答案:

答案 0 :(得分:2)

有多种方法可以做到这一点,但也许最简单的方法是进入服务器端代码 - 当请求进入时,你检查上次硬币更新的时间,如果没有,你运行您的硬币代码并在会话中保存此操作的时间。如果存储时间,请确保它超出所需时间。如果是,继续硬币更新。如果不是,只需使用403或其他失败代码进行响应。

在伪代码中:

if (!$userSession['lastCoinTime'] || $currentTime + $delay > $userSession['lastCoinTime']) {
  // coin stuff
  $userSession['lastCoinTime'] = // new time
} else {
  // don't give them a chance at coin, respond however you want
}

但是,由于您正在讨论每15毫秒进行一次检查,我会使用websockets以便与服务器的连接正在进行中。无论哪种方式,逻辑都可以比较。

如果对此有任何不确定性,请务必在服务器上执行所有硬币逻辑。你永远不能相信用户有效的数据。你可以信任的最多,取决于你的身份验证设置方式,只有他们会拥有的某种秘密代码才会让你知道他们是谁,这是一种技术用来代替持久性会话。除非你这样做,否则你会依赖会话知道用户是谁 - 绝对不要让他们告诉你这个!