我已经设法将我的代码用于文件上传脚本到我的服务器工作。 这是一段非常愚蠢的代码,目前接受每个文件。 这意味着,访问该脚本的每个人都可以立即上传文件。
这是我当前的PHP代码,它将接收POST数据并处理请求:
<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir.basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "OKAY";
}
else
{
echo "NOT SO OKAY";
}
?>
为了防止世界其他地方将文件上传到我的服务器,我将发送带有请求的MD5-Hash密钥,并且基本上只是在代码周围包含“if($ key == $ serverkey)”。
所以看起来应该是这样的:
<?php
if ($_POST['key'] == $serverkey)
{
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir.basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "OKAY";
}
else
{
echo "NOT SO OKAY";
}
}
else
{
echo "WRONG KEY";
}
?>
我现在的问题是......如何以正确的方式将密钥附加到请求中,以便我可以访问“$ _POST ['key']”以及之后的文件? 我不希望密钥意外地应用于文件数据。
该文件在Qt中附加了以下代码:
data.append(QString("--" + bound + "\r\n").toLatin1());
data.append("Content-Disposition: form-data; name=\"" + url + "\"\r\n\r\n");
data.append(scriptName + "\r\n");
data.append("--" + bound + "\r\n");
data.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + inf.fileName() + "\"\r\n");
data.append("Content-Type: application/octet-stream\r\n\r\n");
if (!file.open(QIODevice::ReadOnly)) return;
data.append(file.readAll());
data.append("\r\n");
data.append("--" + bound + "--\r\n");
文件是否已全部限制在边界?
如果我只是添加另一行,那么PHP是否知道两者之间的区别:
data.append("&key=" + key);
我需要“&amp;”吗? 我在谷歌上找不到任何东西...有严格的文件上传或一些值,如通过POST发送的密钥,但从来没有在同一个请求。 谢谢大家的帮助!
答案 0 :(得分:1)
根据要求,我的评论作为答案。
由于您正在检查$_POST
,因此您必须在请求中添加其他POST参数。我想,您也可以在PHP脚本中查看$_GET
并将?key=md5stuff
附加到您的网址。