gpt4 book ai didi

php - 从 Sharepoint 上传时文件扩展名无效

转载 作者:行者123 更新时间:2023-11-28 00:18:48 26 4
gpt4 key购买 nike

我有一个使用文件上传的网站正在运行。除了其中一位用户外,一切正常。他们使用 IE8 将文件从他们的 SharePoint 服务器上传到网站。当我查看 PHP 中的 $_FILES 变量时,“名称”键如下所示:

somefilename[1]

代替

somefilename.pdf

然后上传被阻止,因为不允许扩展。有没有人以前处理过/见过这个?它看起来像一个临时名称,或者一个隐藏的文件扩展名。

编辑:

你们中的一些人请求了 $_FILES 变量:

[Filedata] => Array
(
[name] => Algemene%20Voorwaarden%20Corporate%20Services%202011[2]
[type] => application/octet-stream
[tmp_name] => /tmp/phps19zye
[error] => 0
[size] => 148021
)

这应该是一个 PDF 文件。我需要扩展,不仅出于安全原因,[type] 更适合于此,而且还用于表示和功能。我需要为文件类型显示正确的图标,并单独处理图像。

HTML 表单只是一个基本的测试表单:

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="uploadtest3.php" method="post" enctype="multipart/form-data">
<input type="file" name="file_upload" id="file_upload" />
<br /><input type="submit" value="Uploaden" />
</form>
</body>
</html>

PHP 文件如下:

$targetFolder = '/uploadtests/uploads3';

if (!empty($_FILES)) {
$tempFile = $_FILES['file_upload']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
$targetFile = $targetPath . $_FILES['file_upload']['name'];

move_uploaded_file($tempFile,$targetFile);
echo "OK";
}

最佳答案

简介

以前见过这个问题,但不确定是什么原因造成的。我什至不想将其称为错误,因为 某些文件扩展名可以出于恶意目的而有意删除或更改

最重要的事情是正确验证文件,如果文件有扩展名则不用担心

原因:

  • 文件扩展名很容易被伪造,如果您的应用程序仅依赖于文件扩展名进行验证,那将很糟糕

  • $_FILES ['file_upload']['type'] 将为所有没有扩展名的文件返回 application/octet-stream 所以它也不会验证选项

  • 既然它是一个浏览器问题,那么它就是一个客户端相关问题,所以您没有任何控制权。如果你能做到这一点,你肯定会增加用户体验

简单补丁

解决方法很简单。您只需使用 FILEINFO 验证您的文件并修复上传文件的所有扩展名问题。

您还需要根据 Mime 类型验证所有上传的文件...并删除任何无效文件。

概念验证

$allowedTypes = array (
"pdf" => "application/pdf"
);

$pathFinal = "final";
$pathTemp = "temp";
try {
if (! empty ( $_FILES )) {
$tempFile = $_FILES ['file_upload'] ['tmp_name'];
$fileName = $_FILES ['file_upload'] ['name'];
$destinationTemp = $pathTemp . DIRECTORY_SEPARATOR . $fileName;
$destinationFinal = $pathFinal . DIRECTORY_SEPARATOR . $fileName;
/**
* Move To tempary File
*/
move_uploaded_file ( $tempFile, $destinationTemp );

$fileMime = mimeInfo ( $destinationTemp );
$key = array_search ( $fileMime, $allowedTypes );

/**
* Validate Mime Type
*/
if (empty ( $key )) {
unlink ( $destinationTemp );
throw new Exception ( "File Type not Supported" );
}

/**
* Fix Extention Issues
*/
$ext = pathinfo ( $destinationTemp, PATHINFO_EXTENSION );

if (empty ( $ext )) {
$destinationFinal .= "." . $key;
}

/**
* Transfer File to Original Location
*/
copy ( $destinationTemp, $destinationFinal );
unlink ( $destinationTemp );

echo "OK";
}
} catch ( Exception $e ) {
echo "ERROR :", $e->getMessage ();
}

使用的函数

function mimeInfo($file) {
return finfo_file ( finfo_open ( FILEINFO_MIME_TYPE ), $file );
}

关于php - 从 Sharepoint 上传时文件扩展名无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400326/

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