我的网站上有一个HTML5游戏,每次游戏结束时都会执行Javascript功能。该函数位于外部脚本中:
SubmitScore :(通过游戏脚本调用)
function ONLINE_submitScore(strName,intMs) {
intMs = Math.round(intMs);
result = SQLCommand("online2.php?act=submit&name="+strName+"&score="+intMs);
return result;
}
SQLCommand :接下来被称为
function SQLCommand(url){
ajax=AjaxCaller();
if(ajax==false)
alert("AjaxCaller() failed!");
ajax.open("GET", url, true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4){
if(ajax.status==200){
return ajax.responseText;
}
}
}
ajax.send(null);
}
AjaxCaller : 最终函数叫
function AjaxCaller(){
var xmlhttp=false;
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(E){
xmlhttp = false;
}
}
if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
我遇到的问题是有人可以在Chrome或Firefox中轻松使用开发者控制台并执行Javascript ONLINE_submitScore
功能,以输入他们喜欢的任何分数。我该怎么做才能防止这种情况发生?使用服务器端密码不起作用,因为很容易看到POST
请求读取客户端密码。
答案 0 :(得分:1)
如果您没有使用单向加密密码的登录系统,那么就没有办法阻止任何人按照自己的意愿多次输入他们想要的任何分数。当然,在某些时候,您的高分板只是数据库的开放式管道,任何人都可以欺骗他们想要的任何价值。添加登录系统和密码可以限制用户尝试添加分数的次数 - 但您实际上无法检查它。是的,也许你可以写一个疯狂的验证事情发生在你的游戏中,然后在后端重播和检查(我不知道你的游戏是如何工作的)但如果有人想要,他们仍然可能会伪造一个分数。 / p>
[FWIW赌场通过在后端运行所有结果来工作但是休闲/动作移动应用程序不能以这种方式运行,游戏发生在用户的手机上。只是混淆并让他们更难弄清楚如何欺骗你的系统]
[同样,一个好的起点也就是不包括一个超级精心布局的PHP文件计划,我可以从浏览器中添加一个高分。考虑将其编码为您发送的大型随机文件的一部分,然后在PHP端或其他方面对其进行解码。]
答案 1 :(得分:0)
您可以在表单中使用CSRF吗? 以下是http://www.wikihow.com/Prevent-Cross-Site-Request-Forgery-(CSRF)-Attacks-in-PHP
的示例