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