我正在尝试了解有关PHP中文件上传的更多信息。我遇到了一个问题。 我阅读了一些文章,并观看了一些黑客可以用双扩展名攻击的视频,但是您检查了文件扩展名。像
something.php.jpg
如何预防?预先谢谢你!
答案 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类型也可以被欺骗。