PHP:通过Javascript发布分数的安全方式

时间:2013-02-22 11:44:46

标签: php javascript ajax

我创建了一个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); 

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

2 个答案:

答案 0 :(得分:1)

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

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

例如。让我们说你现在开始游戏,3秒后你提交1000点。 这可能吗?

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

祝你好运。

答案 1 :(得分:1)

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

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

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

4.在服务器端数据库中存储此号码及其发布日期。

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

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

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

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

10.在你的php应用程序中进行健全性检查以检查荒谬和不可能的分数。同时检查获得的分数是否过快。