在使用Yii2框架上传文件时,我面临一个问题,但我认为这个问题比框架问题更深。我有一个应用程序,允许用户做 pdf 文件上传,直到这里,我的应用程序工作良好,但我有麻烦时,一些聪明的重命名文件扩展名从任何东西到pdf。这个应用程序并没有验证这种伎俩。
我试图验证mimetype,但没有成功。现在我在找另一条路。
有人知道如何阻止这种欺骗吗?
发布于 2016-01-22 00:46:17
利用mime_content_type函数解决了该问题。
检查这里的函数,php.net
此函数返回真正的mime类型。
发布于 2016-01-06 04:25:07
最好是保持简单,然后用这个
<?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);
}
?>或者您可以尝试这个方法,.Here,我们假设Pdf文件以%PDF字符串.usually开头,它确实以%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
}
}
?>此代码未进行测试。
参考这些链接,您将获得更多关于哪里出错的信息。
http://php.net/manual/en/function.mime-content-type.php
http://php.net/manual/en/ref.fileinfo.php
发布于 2016-01-05 11:34:36
最好的方法是检查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);
?>https://stackoverflow.com/questions/34610498
复制相似问题