将文件写入Web服务器的安全方法

时间:2015-04-28 00:27:07

标签: javascript php file xmlhttprequest

我试图通过javascript函数调用PHP函数将文本文件写入我的Web服务器,这样我就可以在不使用数据库的情况下为我的游戏存储简单数据。但这将允许随机人员从控制台调用该功能(通过按F12打开),并因此将文件写入我的Web服务器。

有什么方法可以解决这个问题吗?一切都是错的,我必须从头开始吗?或者这是不可能的?

我目前的代码:

的test.html:

<script src="js/php.js"></script>
<button onclick="phpFunc('test.php', 'write(\'Hello, World!\')', alertText);">test</button>

JS / php.js:

function getReq() {
    var req = false;
    if (XMLHttpRequest) req = new XMLHttpRequest();
    else {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                return false;
            }
        }
    }
    return req;
}

function phpFunc(url, func, success) {
    sfunc = func.split(")")[0].split("(");
    rfunc = sfunc[0];
    rparams = sfunc[1];

    var req = getReq();
    if (!req) return false;
    req.onreadystatechange = function() { if (req.readyState == 4 && req.status === 200) success(req.responseText); }
    req.open("GET", url + "?t=" + Math.random() + "&func=" + rfunc + "&params=" + rparams, true);
    req.send();
}

function alertText(text) {
    alert(text);
}

test.php的:

<?php
    function write($text) {
        $file = fopen("test.txt", "w"); 
        fwrite($file, $text);
        fclose($file);
    }

    {
        $func = $_GET["func"];
        $params = explode(", ", $_GET["params"]);
        for ($i = 0; $i < count($params); $i++) {
            if (is_numeric($params[$i])) $params[$i] = (int)$params[$i];
            else $params[$i] = str_replace(array("\"", "'"), "", $params[$i]);
        }
        call_user_func_array($func, $params);
    }
?>

英语不是我的第一语言,所以我不确定是否所有内容都输入正确。

2 个答案:

答案 0 :(得分:2)

永远不要相信客户端应用。

JavaScript应用程序比编译应用程序更容易被滥用,因为操作JavaScript的工具更容易被更多人访问。

如果可能,请让您的Web服务器界面仅允许客户端报告游戏中采取的操作,并让服务器负责确定和记录结果。您还可以应用&#34;合理性&#34;检查客户报告的操作。

你可以让人们更难以使用JavaScript混淆作弊。这不是一个灵丹妙药,但它会减少那些有能力利用JavaScript界面​​来操纵游戏的人群。

答案 1 :(得分:0)

身份验证可以使只有登录的用户可以访问该文件。

您还可以验证ajax发送的内容,以便只显示您whitelist的内容。