在 php 中检查 mime 类型非常简单,但据我所知,mime 可以被欺骗。攻击者可以上传一个 php 脚本,例如 jpeg mime 类型。我想到的一件事是检查上传文件的文件扩展名并确保它与 mime 类型相匹配。所有这些都假设上传目录可以通过浏览器访问。
问题是否有任何其他技术可以防止“坏文件”进入 mime 类型欺骗?
最佳答案
简短回答:否。
更长的答案:
比较扩展名并确保它与 MIME 类型匹配并不能真正阻止任何事情。正如评论中所说,修改文件扩展名更容易。 MIME 类型和扩展名仅作为提示,它们没有内在的安全性。
确保传入的文件没有危害在很大程度上取决于您对它们的目的。在你的情况下,我知道你期待的是图像。因此,您可以先执行一些完整性检查:扫描前几个字节以查看文件是否包含相关图像 header 签名 - 所有相关图像格式都有这些。
“签名 header ”可帮助您决定文件试图模拟哪种图像格式。在下一步中,您可以检查其余内容是否符合基础图像格式。这将向您保证该文件确实是该特定格式的图像文件。
但即便如此,该文件仍可能以某种方式精心制作,当您显示图像时,用于显示该图像的流行库(例如 libpng 等)会遇到攻击者在该库中发现的缓冲区溢出.
不幸的是,除了根本不允许来自客户端的任何输入之外,没有办法主动阻止这种情况。
关于php - MIME 类型欺骗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8028184/