我试图通过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 + "¶ms=" + 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);
}
?>
英语不是我的第一语言,所以我不确定是否所有内容都输入正确。
答案 0 :(得分:2)
永远不要相信客户端应用。
JavaScript应用程序比编译应用程序更容易被滥用,因为操作JavaScript的工具更容易被更多人访问。
如果可能,请让您的Web服务器界面仅允许客户端报告游戏中采取的操作,并让服务器负责确定和记录结果。您还可以应用&#34;合理性&#34;检查客户报告的操作。
你可以让人们更难以使用JavaScript混淆作弊。这不是一个灵丹妙药,但它会减少那些有能力利用JavaScript界面来操纵游戏的人群。
答案 1 :(得分:0)
身份验证可以使只有登录的用户可以访问该文件。
您还可以验证ajax发送的内容,以便只显示您whitelist的内容。