0

我目前在我的网站上发布了一个 JS 游戏。我想要一个获取用户名并将其提交到服务器的 HTML 表单(仅保存在文本文件中)。目前,我可以使用 PHP,以便 website/game/scores.php?action=submit&name="Player's Name"&score="Player's Score"。我非常有信心这会奏效。但是,任何可以阅读我的 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 代码中,我只检索“名称”和“分数”参数。

4

3 回答 3

1

使用这样的表单标签:

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

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

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

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

于 2013-11-11T23:51:38.477 回答
1

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

在此处此处查看链接

于 2013-11-11T23:52:22.297 回答
0

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

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

于 2013-11-11T23:57:07.613 回答