gpt4 book ai didi

php - 使用 PHP 上传 DOC 或 PDF

转载 作者:IT王子 更新时间:2023-10-28 23:55:40 26 4
gpt4 key购买 nike

我可以很好地上传图片,但是当我将类型从 image/jpg、image/gif 更改为 application/msword 和 application/pdf 时,它不起作用。这是我的代码。完全相同的代码适用于图像,但对于上传文档和 pdf,它会输出“无效文件”。这里发生了什么?我的文件只有大约 30kb,远低于此处的文件大小限制。

$allowedExts = array("pdf", "doc", "docx"); 
$extension = end(explode(".", $_FILES["file"]["name"]));

if ( ( ($_FILES["file"]["type"] == "application/msword") || ($_FILES["file"]["type"] == "text/pdf") )
&& ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts))
{
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
}
else
{
echo "Invalid file."
}

最佳答案

不要使用 ['type'] 参数来验证上传。该字段是用户提供的,可以轻松伪造,允许上传任何类型的文件。 ['name'] 参数也是如此 - 这是用户提供的文件名。伪造也很简单,所以用户发送 nastyvirus.exe 并将其称为 cutekittens.jpg

验证上传的正确方法是使用服务器端 MIME 类型确定,例如通过 fileinfo ,加上正确的上传成功检查,你没有:

if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) {
die("Upload failed with error " . $_FILES['file']['error']);
}
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['file']['tmp_name']);
$ok = false;
switch ($mime) {
case 'image/jpeg':
case 'application/pdf'
case etc....
$ok = true;
default:
die("Unknown/not permitted file type");
}
move_uploaded_file(...);

您还使用用户提供的文件名作为 move_uploaded_files 的最终目的地的一部分。将路径数据嵌入到该文件名中也很简单,然后您会盲目使用该文件名。这意味着恶意远程用户可以在您的服务器上他们知道路径的任何文件上乱涂乱画,并植入新文件。

关于php - 使用 PHP 上传 DOC 或 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11601342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com