首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何阻止假文件后缀上传?

如何阻止假文件后缀上传?
EN

Stack Overflow用户
提问于 2016-01-05 11:21:46
回答 3查看 261关注 0票数 0

在使用Yii2框架上传文件时,我面临一个问题,但我认为这个问题比框架问题更深。我有一个应用程序,允许用户做 pdf 文件上传,直到这里,我的应用程序工作良好,但我有麻烦时,一些聪明的重命名文件扩展名从任何东西到pdf。这个应用程序并没有验证这种伎俩。

我试图验证mimetype,但没有成功。现在我在找另一条路。

有人知道如何阻止这种欺骗吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-22 00:46:17

利用mime_content_type函数解决了该问题。

检查这里的函数,php.net

此函数返回真正的mime类型。

票数 0
EN

Stack Overflow用户

发布于 2016-01-06 04:25:07

最好是保持简单,然后用这个

代码语言:javascript
复制
<?php 
$finfo = finfo_open(FILEINFO_MIME_TYPE); 
if(finfo_file($finfo,$filename) == 'application/pdf'){
    // input file is pdf
}
?>

既然你说这不适合你,你可以试试这些

如果您使用的是Linux服务器,则可以使用shell命令检查它们的mime类型。

代码语言:javascript
复制
<?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开头。

代码语言:javascript
复制
<?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

票数 1
EN

Stack Overflow用户

发布于 2016-01-05 11:34:36

最好的方法是检查mime文件类型:

http://php.net/manual/en/function.finfo-file.php

代码语言:javascript
复制
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE); 
if(finfo_file($finfo,$filename) == 'application/pdf'){
    // input file is pdf
}
finfo_close($finfo);
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34610498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档