如何检查安全性的上传文件类型

时间:2015-02-07 10:26:45

标签: php security file-upload

在php手册中说$_FILES['userfile']['type']在客户的控制之下(所以也许它可以编辑,我猜)。

php manual.

  

$_FILES['userfile']['type']
  文件的mime类型,如果浏览器提供了这个信息。
一个例子是“image / gif”。
然而这个mime类型没有在PHP端检查,因此不采用它价值是理所当然的。

和此:

  

您可以使用$_FILES['userfile']['type']变量丢弃任何与某个类型条件不匹配的文件,但仅将其用作一系列检查中的第一个,因为此值完全在客户端,而不是在PHP端检查。



那么如何检查上传文件的类型以防止上传有害文件?

1 个答案:

答案 0 :(得分:2)

正如您自己发现的那样,您应该彻底检查每个文件以避免安全问题。

主要取决于您要允许的文件类型。我会采用这两个步骤:

<强> 1。检查内容类型。

这里没有什么可以添加的,你已经在你的问题中发布了这样做的方法。但是,这可能是伪造的,所以请不要忘记......

<强> 2。验证文件内容。

您应该仔细检查文件内容。如果您正在处理图像,可以使用phps图像功能以确保安全。

示例:

$x = getimagesize($_FILES['uploadfile']['tmp_name']);
if (isset($x)) {
    if($x['mime'] != 'image/gif' && $x['mime'] != 'image/jpeg') {
        echo 'Not a valid GIF or JPEG';
        exit(0);
    }
}