【问题标题】:How to protect SQL run through PHP by Javascript Post function如何通过Javascript Post函数保护通过PHP运行的SQL
【发布时间】:2015-05-11 05:24:16
【问题描述】:

我的网站上有一个 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 请求读取客户端密码。

【问题讨论】:

    标签: javascript php jquery security post


    【解决方案1】:

    如果您没有使用单向加密密码的登录系统,则无法阻止任何人输入他们想要的任何分数,他们想输入多少次都可以。当然,在某些时候,你的高分板只是你数据库的一个开放管道,任何人都可以欺骗他们想要的任何价值。添加登录系统和密码,您可以限制用户尝试添加分数的次数 - 但您确实无法检查它。是的,也许你可以写一个在你的游戏中发生的疯狂验证,然后在后端进行重放和检查(我不知道你的游戏是如何工作的),但如果有人愿意,他们仍然可以伪造分数。

    [FWIW 赌场通过在后端运行所有结果来工作,但休闲/动作移动应用程序不能这样工作,游戏发生在用户的手机上。只是混淆,让他们更难弄清楚如何欺骗你的系统]

    [同样,一个很好的起点是不包括一个布局非常好的 PHP 文件计划,我可以从我的浏览器中点击它来添加高分。考虑将其编码为您发送的大而粗糙的随机文件的一部分,然后在 PHP 端或其他东西上对其进行解码。]

    【讨论】:

      【解决方案2】:

      您可以在表单中使用 CSRF。 这是一个例子http://www.wikihow.com/Prevent-Cross-Site-Request-Forgery-(CSRF)-Attacks-in-PHP

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 2021-06-04
        • 1970-01-01
        • 2017-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多