使用 HTML 和 PHP 获得高分信息


High score info with HTML and PHP

我目前在我的网站上发布了一个JS游戏。我想要一个 HTML 表单,该表单获取用户名并将其提交给服务器(仅保存在文本文件中)。目前,我可以使用PHP使网站/游戏/分数.php?操作=提交&名称="玩家姓名"&得分="玩家分数"。我很有信心这会奏效。但是,任何可以阅读我的HTML的人都可以将假分数传递给该函数。

我应该如何处理此安全问题?

注意:我知道 SQL 可能更适合这种情况,但我还对学习 mySQL 不感兴趣!

提前谢谢。

编辑:现在我有另一个问题。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']);
}

尽管服务器识别请求,但它无法获取任何参数。为什么?谢谢。

编辑2:对不起,愚蠢的编辑。我已经通过创建两个单独的表单字段来解决这个问题,一个用于名称,另一个用于分数。在PHP代码中,我只是检索"name"和"score"参数。

使用如下所示的表单标记:

<form action="scores.php" method="post">

然后,传递给scores.php的所有变量都可以像这样访问:

$name = $_POST['name']; 
$score = $_POST['score'];

并且不会出现在 URL 的查询字符串中。

如果您

正在使用METHOD="GET"它将显示在URL中,并且是安全噩梦,但是如果您使用METHOD="POST"则它不会显示并且更安全。

在此处和此处查看链接

您可以通过

多种方式保护此应用程序。在不知道游戏性质的情况下,很难确切地说出来,但首先你应该使用 POST 方法而不是 GET(这样 url 参数将不可读),但这仍然不完全安全,因为任何人都可以使用 POST 参数点击该脚本。

我建议在PHP本身中计算分数,这是用户不同操作的结果。例如,在国际象棋游戏中,您的后端应该知道哪些棋子在哪里,如果用户拿了一颗棋子,那么后端就知道,这使得前端非常愚蠢,只是更新 UI 以反映后端。