【问题标题】:ajax post cheating preventionajax后作弊预防
【发布时间】:2018-05-21 04:39:01
【问题描述】:

我正在尝试使用 ajax 和 php 制作游戏,但我对它很陌生。

首先,他们必须选择难度。假设有人选择了easy。

function clickedEasy() {
    $.post("game.php", {
        clicked: "easy"
    }, function (data, status) {
        console.log(data);
    });
}

Game.php:

if (isset($_POST['clicked'])) {
    if ($_POST['clicked'] == 'easy') { //Assign difficulty
        $difficulty = 1;
    } elseif ($_POST['clicked'] == 'medium') {
        $difficulty = 2;
    } elseif ($_POST['clicked'] == 'hard') {
        $difficulty = 3;
    }
$difficulty = $_SESSION['difficulty'];
echo ($difficulty);
}

现在想象他离完成游戏还有一步之遥,他也去控制台并粘贴$.post("game.php", {clicked: "hard"}, function (data, status) {console.log(data);})他可以完成游戏并获得困难难度奖励。这只是一个示例,可以使用浏览器控制台和源代码完成更多工作。我不明白如何才能避免这些类型的作弊。

谢谢。

【问题讨论】:

  • 这就像你还没有学会如何击球时担心美国大师赛第 11 洞球道狭窄一样。做个游戏就好了。
  • 保存难度服务器端,以后不要改了。

标签: javascript php jquery ajax


【解决方案1】:

阻止这种情况的一个简单方法是检查难度是否已经设置。

例如:

if (isset($_POST['clicked']) && !isset($_SESSION['difficulty'])) {
...
}

或者如果您将其存储在数据库中,请检查它是否已经设置在那里。

请记住,javascript 中的任何内容都可以编辑,因此可以用来作弊,而 PHP 中的任何内容都不能。使用 AJAX(使用 javascript 调用 PHP),允许用户使用 javascript 编辑 PHP 打开一个攻击向量。使用会话变量并仅使用 php 编辑它们是确保用户不作弊的方法。

编辑:您还可以散列您不想更改的值并将密钥仅保留在服务器上。这实现起来更复杂,但从长远来看,它确实意味着服务器的工作量更少。

【讨论】:

  • 清洁然后我的答案:)
【解决方案2】:

这不是您应该担心的事情。但一种方法是使用 cookie/会话跟踪他的进度。如果进度会话已设置,则不要进行更新。

if (isset($_POST['clicked']) && !isset($_SESSION['in_progress'])) {
    if ($_POST['clicked'] == 'easy') { //Assign difficulty
        $difficulty = 1;
    } elseif ($_POST['clicked'] == 'medium') {
        $difficulty = 2;
    } elseif ($_POST['clicked'] == 'hard') {
        $difficulty = 3;
    }
// Set a progress session
$_SESSION['in_progress'] = true;
$difficulty = $_SESSION['difficulty'];
echo ($difficulty);
}else{
  // Just return the difficulty from the session
  echo $_SESSION['difficulty'];
}

【讨论】:

    猜你喜欢
    • 2012-01-06
    • 1970-01-01
    • 2010-12-17
    • 2015-04-06
    • 2023-03-17
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多