【发布时间】:2013-12-20 19:04:55
【问题描述】:
我正在创建一个允许用户上传 pdf 文档的 Web 应用程序。以下是检查(限制)文档类型为 pdf 的代码。
if (isset($_POST['submitbutton'])) {
$name = $_FILES['myfile']['name'];
$type = $_FILES['myfile']['type'];
$size = $_FILES['myfile']['size'];
$tmpname = $_FILES['myfile']['tmp_name'];
$ext = substr($name, strrpos($name,'.')); //Get the extension of the selected file
echo $type.' This is the type';
echo '<br>';
if (($type == "application/pdf")||($type == "application/octet-streamn")) {
echo 'ok';
} else {
echo "That is not a pdf document";
}
}
我通过 echo(ing) $type 到屏幕来检查类型。但是Firefox的类型输出不同。我只需要确认以下 MIME 类型。我说的对吗:
Internet Explorer:应用程序/pdf
Opera:应用程序/pdf
FireFox:应用程序/八位字节流
或者是否有涵盖所有现有浏览器的标准 mime 类型。请帮忙,我的提要仍然被 php 和文件弄湿了
【问题讨论】:
-
如果依赖 mime 类型,您将无法知道文件的真正含义。任何人都可以发送一个 .php 文件并伪造它的图像/gif 或类似文件。这就是为什么我们不信任用户输入,文件上传是用户输入。
-
不要相信用户发送的任何内容。发送 mime 类型为
application/pdf的 PHP 文件将非常简单。 -
如果我使用 application/pdf 仅用于检查文件类型,我得到的输出表明它不是 firefox 上的 pdf。有解决办法吗?因为我认为我不能排除在 firefox 上检查 pdf 的文件
标签: php pdf file-upload