ajax post作弊预防

时间:2018-05-20 20:30:15

标签: javascript php jquery ajax

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

首先他们必须选择难度。让我们说有人选择容易。

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);})完成游戏并获得难度奖励。这只是一个示例,使用浏览器控制台和源代码可以完成更多工作。我不明白我怎么能避免这些类型的作弊。

感谢。

2 个答案:

答案 0 :(得分:2)

停止此操作的一种简单方法是检查是否已设置难度。

例如:

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

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

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

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

答案 1 :(得分:0)

不是你应该担心的事情。但是一种方法是使用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'];
}