我正在努力学习更多关于PHP文件上传的知识。我遇到了一个问题。我读了一些文章,看了一些视频,黑客可以用双扩展名攻击,但是你检查文件扩展名。喜欢
something.php.jpg
如何预防呢?提前谢谢你!
发布于 2019-06-11 19:54:54
我对这个问题也很感兴趣。我在多台服务器上测试了像something.php.jpg这样的双重扩展,并且我开始相信,除非服务器上有其他错误设置,否则它不是真正的安全漏洞。在所有Apache服务器上,我测试了它,它没有执行文件中的php代码。
大多数关于php上传漏洞的讨论都引用了这个网站:https://www.acunetix.com/websitesecurity/upload-forms-threat/,作者第一次引用的地方是:mime.html#multipleext,其中写道:
文件可以有多个扩展名;扩展名的顺序通常是不相关的。例如,如果文件welcome.html.fr映射到内容类型text/html和法语语言,那么文件welcome.fr.html将映射到完全相同的信息上。如果给出多个扩展,将映射到相同类型的元数据,则将使用右边的扩展,但语言和内容编码除外。例如,如果.gif映射到媒体类型的映像/gif,而.html映射到媒体类型的text/html,那么文件welcome.gif.html将与媒体类型welcome.gif.html/html相关联。
然后,https://www.acunetix.com/websitesecurity/upload-forms-threat/的作者说:
因此,名为filename.php.123的文件将被Apache解释为PHP文件,并将被执行。当然,只有在使用web server...If AddHandler指令已知的MIME类型列表中未指定最后一个扩展(在本例中为AddHandler)时,所有包含.php扩展的文件名( .php,.php.jpg)都将作为PHP脚本执行。
这似乎与Apache文档的声明相反。如果我遗漏了什么,请纠正我。Apache声明,"welcome.gif.html将与媒体类型text/html相关联“,因此我假设something.php.jpg将与媒体类型的图像/jpeg相关联。
然后,本文的作者指出,如果apache配置文件有以下一行,则会出现漏洞:
AddHandler .php 5-脚本.php
我也尝试过这一行,但是文件仍然没有以php的形式执行。但是,我在过去10年中看到的大多数AddHandler代码都是这样的:
AddHandler应用程序/x .html .htm .php
那么,上面的行是否易受双重扩展漏洞的影响?还是有特定版本的php或Apache易受攻击,某些版本的php或Apache没有易受攻击?
当然,我认为上传的文件仍然应该检查mime类型,但是我已经看到mime类型也可以被欺骗。
发布于 2019-02-27 10:27:44
用户上传是有问题的。你可以做一些事情来减轻风险。例如,如果您打算只允许图像上传,那么您可以使用内置的类型()函数来确保用户实际上是在上传有效的图像文件。
// 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
https://stackoverflow.com/questions/54903204
复制相似问题