我创建了一个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);
但如何使用身份验证密钥等安全发布或获取请求?
答案 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应用程序中进行健全性检查以检查荒谬和不可能的分数。同时检查获得的分数是否过快。