-1

我创建了一个 php 文件,它将分数更新到数据库。例如:http://domain.com/heli/test.php?id=100001181378824&score=50000

Test.php 包含以下代码

mysql_connect(localhost,$user,$password);
$id = mysql_real_escape_string($_GET['id']);
$score = mysql_real_escape_string$_GET['score']);
@mysql_select_db($database) or die( "Unable to select database");
$query = "UPDATE heli SET score = '$score' WHERE app = '$id'";
echo $query;
$result=mysql_query($query);
mysql_close();

我想知道如何通过 Javascript 以安全的方式获取或发布对我的 test.php 的请求。现在我在 Js 下创建了。

 var httpwp = new XMLHttpRequest();
 var urlwp = "http://domain.com/heli/test.php?id=100001181378824&score=50000";
 var paramswp = "id="+ids+"&score="+scores+";
 httpwp.open("GET", urlwp, true);
 httpwp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 httpwp.setRequestHeader("Content-length", paramswp.length);
 httpwp.setRequestHeader("Connection", "keep-alive");
 httpwp.send(paramswp); 

但是如何使用身份验证密钥等安全地发布或获取请求?

4

2 回答 2

1

您永远无法确定客户提交的数据。

为了使这更“安全”,您必须在您的服务器上编写一些关于该分数如何计算的逻辑。

例如。假设您现在开始游戏,并在 3 秒后提交 1000 分。那可能吗?

您必须创建一些步骤或限制,例如,如果玩家处于 1 级,则分数不能超过 100 分,并且不能在 1 分钟游戏开始前提交。等等!

祝你好运。

于 2013-02-22T11:55:46.717 回答
1

1.首先,修复你的 PHP 代码,这样你就不会受到 SQL 注入的攻击。

2.接下来,通过 https 而不是 http 访问您的服务器。

3.添加一个php文件来接受一个名字和密码的登录请求,这将返回一个唯一的会话密钥。(一个大的随机数可能就足够了,或者随机数据的 sha1 哈希 + 请求中的一些数据)

4.将此号码连同它的发行日期一起存储在服务器端数据库中。

6.在上传乐谱之前,让您的应用从此文件中获取会话密钥。

7. 让您的分数保存 php 文件接受您的会话密钥以及分数数据,并将其与数据库进行比较,以查看其是否有效,并且不会太旧(检查发布日期)。

8.存储一个新的会话密钥并与分数更新的结果一起返回,并从数据库中删除旧的会话密钥。

9.让你的js在后面的帖子中使用新的密钥,每次从服务器获取一个新的密钥。

10.在您的 php 应用程序中建立健全性检查,以检查荒谬和不可能的分数。还要检查过快获得的大分数。

于 2013-02-22T12:13:31.477 回答