我已经设法让我的文件上传脚本代码到我的服务器工作。这是一段非常愚蠢的代码,目前接受每个文件。这意味着,每个访问脚本的人都可以立即上传文件。
这是我当前的 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);
我需要“&”吗?我在谷歌上找不到任何东西......要么有严格的文件上传,要么有一些值,比如通过 POST 发送的密钥,但绝不会在同一个请求中同时出现。感谢大家的帮助!