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

Secure way to write a file to a web server

我正在尝试获取 javascript 函数来调用 PHP 函数以将文本文件写入我的网络服务器,这样我就可以在不使用数据库的情况下为我的游戏存储简单数据。但这将允许随机的人从控制台(按 F12 打开)调用该功能,然后将文件写入我的网络服务器。

有什么办法可以解决这个问题吗?一切都错了吗,我必须重新开始吗?还是根本不可能?


我当前的代码:

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);
    }
?>

此外,英语不是我的母语,所以我不确定是否输入正确。

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

JavaScript 应用程序比编译后的应用程序更容易被滥用,因为操纵 JavaScript 的工具更容易为更多人所用。

如果可能的话,让您的 Web 服务器界面只允许客户端报告在游戏中采取的操作,并让服务器负责确定和记录结果。您还可以对客户端报告的操作应用 "reasonableness" 检查。

您可以使用 JavaScript 混淆使人们更难作弊。这不是灵丹妙药,但会减少有能力利用 JavaScript 界面来操纵游戏的人数。

身份验证将使只有登录用户才能获得写入文件的权限。

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