在我的上传脚本中安全地允许.zips和PDF

时间:2013-09-13 12:07:36

标签: php file-upload

我目前正在构建一项功能,允许我的用户上传文档以发送给我网站上的其他用户。

现在我了解了允许用户上传包含将要执行的PHP代码的图像的图像可能会发生的一些风险。

我在发布此问题之前已经在线进行了研究,同时查看了有关MIME类型验证的PHP文档,并发现了这个

$_FILES['userfile']['type']
  This mime type is however not checked on the PHP side and therefore 
  don't take its value for granted.

事先我认为这将是我用来对抗上传的不良文件的主要方法,尽管我努力找到安全上传的方法都指向检查上面的MIME类型。

理想情况下,我希望用户能够上传txt,pdf,doc和ZIP文件。

上述方法(检查MIME类型)仍然是一个可行的选项吗?

感谢您的阅读。

2 个答案:

答案 0 :(得分:0)

我检查原始文件名。我还使用我想要的扩展名重命名上传的文件。因此,如果有人上传.exe文件,则有两个障碍:

  1. 我检查过文件名,看过.exe并拒绝上传
  2. 我已将所有文件重命名为我自己的可能扩展名,而.exe不是其中之一。
  3. Zips是丑陋的,因为它们可能包含坏文件,所以需要解压缩它们并检查和重命名每个文件以及删除任何坏文件。

    取值

答案 1 :(得分:0)

也许有人会有用的。

private function file_contains_php($file) {
        $contents = file_get_contents($file);
        $position = strpos($contents, '<?php');
        return $position !== false;
}