php double extension漏洞

时间:2019-02-27 10:24:08

标签: php security

我正在尝试了解有关PHP中文件上传的更多信息。我遇到了一个问题。 我阅读了一些文章,并观看了一些黑客可以用双扩展名攻击的视频,但是您检查了文件扩展名。像

  

something.php.jpg

如何预防?预先谢谢你!

2 个答案:

答案 0 :(得分:0)

用户上传有问题。您可以采取一些措施来减轻风险。例如,如果您打算仅允许上传图片,则可以使用内置的mime_content_type()函数来确保用户实际上在上传有效的图片文件。

//  Let's assume that the name attribute of the file input field you have used is "myfile"

$tempFile =  $_FILES['myFile']['tmp_name'];  // path of the temp file created by PHP during upload
switch(mime_content_type($tempFile)) { 

 case "image/jpeg":
 // your actions go here...

    }
}
else {
    echo "This is not a valid image file";
}

进一步阅读:https://security.stackexchange.com/questions/32852/risks-of-a-php-image-upload-form

答案 1 :(得分:0)

我对这个问题也很感兴趣。我已经在多台服务器上测试了诸如Something.php.jpg之类的双扩展名,并且我开始相信这不是一个真正的安全漏洞,除非在服务器上设置了其他错误的地方。在我测试过的所有Apache服务器上,它都没有执行文件中的php代码。

大多数有关php上传漏洞的讨论都引用了该网站:https://www.acunetix.com/websitesecurity/upload-forms-threat/,作者首先引用了:http://httpd.apache.org/docs/2.4/mod/mod_mime.html#multipleext,其中说:

  

文件可以具有多个扩展名;扩展名的顺序通常是不相关的。例如,如果文件welcome.html.fr映射到内容类型text / html和语言French,则文件welcome.fr.html将映射到完全相同的信息。如果给出了多个扩展名映射到相同类型的元数据,则将使用右侧的扩展名,语言和内容编码除外。例如,如果.gif映射到媒体类型的image / gif和.html映射到媒体类型的text / html,则文件welcome.gif.html将与媒体类型的text / html关联。

然后https://www.acunetix.com/websitesecurity/upload-forms-threat/的作者说:

  

因此,一个名为filename.php.123的文件将被Apache HTTP Server解释为一个PHP文件,并将被执行。当然,只有在未在网络服务器已知的MIME类型列表中指定最后一个扩展名(在本例中为.123)时,此方法才起作用...如果使用AddHandler指令,则所有包含.php扩展名的文件名(.php,.php.jpg)将作为PHP脚本执行。

这似乎与Apache文档所说的相反。如果我缺少某些东西,请纠正我。 Apache文档指出,“ welcome.gif.html将与媒体类型的text / html关联”,因此,我假设将something.php.jpg与媒体类型的image / jpeg关联。

然后,本文的作者指出,如果apache配置文件包含以下行,则会出现此漏洞:

  

AddHandler php5-script .php

我也尝试过该行,但该文件仍未作为php执行。但是我在过去十年中看到的大多数AddHandler行都更像这样:

  

AddHandler application / x-httpd-php .html .htm .php

那么上面的代码行是否不容易受到双扩展漏洞的影响?还是存在某些易受攻击的特定版本的php或Apache和不易受攻击的某些版本的php或Apache?

当然,我相信上载的文件仍应检查mime类型,但我已读过mime类型也可以被欺骗。