我正面临使用Yii2框架上传文件的问题,但我认为这个问题比框架问题更深入。我有一个应用程序,允许用户上传 pdf 文件,直到这里我的应用程序工作正常,但我有一些smartass将文件扩展名从任何名称重命名为pdf。该应用程序没有验证这种技巧。
我没有成功验证 mimetype 。现在我正在寻找另一种方式。
任何人都知道如何阻止这种欺骗行为?
答案 0 :(得分:1)
最好保持简单,只需使用此
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if(finfo_file($finfo,$filename) == 'application/pdf'){
// input file is pdf
}
?>
既然你说它不适合你,你可以试试这些
如果您使用的是Linux服务器,则可以使用shell命令检查它们的mime类型
<?php
function detectMimeType($filename='')
{
$filename = escapeshellcmd($filename);
$command = "file -b --mime-type -m /usr/share/misc/magic {$filename}";
$mimeType = shell_exec($command);
return trim($mimeType);
}
?>
或者您可以尝试这种方法。我们假设Pdf文件以%PDF字符串开头。[通常它以%PDF开头]。
<?php
function detectFileType($filename='')
{
$handle = fopen($filename, "rb");
$contents = fread($handle, 4);
fclose($handle);
if($contents == "%PDF")
{
return "application/pdf";
}
else
{
return "application/octet-stream"; //unknown type
}
}
?>
[此代码未经过测试]
请参阅这些链接,您将获得有关出错的更多信息
答案 1 :(得分:0)
最好的方法是检查mime类型的文件:
http://php.net/manual/en/function.finfo-file.php
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if(finfo_file($finfo,$filename) == 'application/pdf'){
// input file is pdf
}
finfo_close($finfo);
?>
答案 2 :(得分:0)