В настоящее время у меня есть JS-игра, размещенная на моем сайте. Я хочу иметь форму HTML, которая получает имя пользователя и отправляет его на сервер (сохраняется только в текстовом файле). На данный момент я могу использовать PHP, чтобы сайт/игра /scores.php? Action = submit & name = "Player Name" & score = "Player Score". Я довольно уверен, что это сработает. Тем не менее, любой, кто мог бы читать мой HTML, мог просто передать поддельную оценку этой функции.
Как мне подойти к этой проблеме безопасности?
Примечание. Я знаю, что SQL, вероятно, будет работать лучше для этой ситуации, но мне еще не интересно изучать mySQL!
Заранее спасибо.
EDIT: Теперь у меня другая проблема. PHP не получает параметры POST из формы. Код ниже:
JS:
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "http://michaelman.net/snake/scores.php");
var dataField = document.createElement("input");
dataField.setAttribute("type", "hidden");
dataField.setAttribute("name", name);
dataField.setAttribute("value", score);
form.appendChild(dataField);
document.body.appendChild(form);
form.submit();
PHP:
switch($_SERVER['REQUEST_METHOD']){
case 'GET': $the_request = &$_GET; echo "GTFO!";
case 'POST': $the_request = &$_POST; writeToFile($_POST['name'], $_POST['value']);
echo ("Saved: " . $_POST['name'] . " - " . $_POST['value']);
}
Хотя сервер распознает запрос, он не может получить ни один из параметров. Почему это? Благодарю.
EDIT 2: Извините за немое редактирование. Я понял это, создав два отдельных поля формы, один для имени, а другой для оценки. В PHP-коде я просто извлекаю параметры "имя" и "оценка".
Используйте тег формы следующим образом:
<form action="scores.php" method="post">
Затем все переменные, переданные в scores.php
будут доступны следующим образом:
$name = $_POST['name'];
$score = $_POST['score'];
и не будет отображаться в строке запроса URL.
Существует много способов защитить это приложение. Не зная характера вашей игры, трудно сказать точно, но во-первых, вы должны использовать метод POST вместо GET (таким образом, параметры url не будут читаемыми), это все еще не полностью безопасно, поскольку любой может по-прежнему ударить по этому сценарию с параметрами POST.
Я бы предложил иметь оценки, рассчитанные в самом PHP, в результате различных действий пользователя. EG в игре в шахматы, ваш бэкэнд должен знать, какие части есть где, если пользователь берет кусок, то бэкенд знает, делая передний конец довольно глупым и просто обновляя пользовательский интерфейс, чтобы отразить бэкэнд.
METHOD="POST"
вместоGET
он не будет отображаться в URL. Смотрите ссылку здесь