将文件写入 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 + "¶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);
}
?>
此外,英语不是我的母语,所以我不确定是否输入正确。
永远不要相信客户端应用程序。
JavaScript 应用程序比编译后的应用程序更容易被滥用,因为操纵 JavaScript 的工具更容易为更多人所用。
如果可能的话,让您的 Web 服务器界面只允许客户端报告在游戏中采取的操作,并让服务器负责确定和记录结果。您还可以对客户端报告的操作应用 "reasonableness" 检查。
您可以使用 JavaScript 混淆使人们更难作弊。这不是灵丹妙药,但会减少有能力利用 JavaScript 界面来操纵游戏的人数。
身份验证将使只有登录用户才能获得写入文件的权限。
您还可以验证 ajax 发送的内容,以便只写入您 whitelist 的内容。
我正在尝试获取 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 + "¶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);
}
?>
此外,英语不是我的母语,所以我不确定是否输入正确。
永远不要相信客户端应用程序。
JavaScript 应用程序比编译后的应用程序更容易被滥用,因为操纵 JavaScript 的工具更容易为更多人所用。
如果可能的话,让您的 Web 服务器界面只允许客户端报告在游戏中采取的操作,并让服务器负责确定和记录结果。您还可以对客户端报告的操作应用 "reasonableness" 检查。
您可以使用 JavaScript 混淆使人们更难作弊。这不是灵丹妙药,但会减少有能力利用 JavaScript 界面来操纵游戏的人数。
身份验证将使只有登录用户才能获得写入文件的权限。
您还可以验证 ajax 发送的内容,以便只写入您 whitelist 的内容。