php - MIME 类型欺骗

标签 php html security mime-types spoofing

在 php 中检查 mime 类型非常简单,但据我所知,mime 可以被欺骗。攻击者可以上传一个 php 脚本,例如 jpeg mime 类型。我想到的一件事是检查上传文件的文件扩展名并确保它与 mime 类型相匹配。所有这些都假设上传目录可以通过浏览器访问。

问题是否有任何其他技术可以防止“坏文件”进入 mime 类型欺骗?

最佳答案

简短回答:否。

更长的答案:

比较扩展名并确保它与 MIME 类型匹配并不能真正阻止任何事情。正如评论中所说,修改文件扩展名更容易。 MIME 类型和扩展名仅作为提示,它们没有内在的安全性。

确保传入的文件没有危害在很大程度上取决于您对它们的目的。在你的情况下,我知道你期待的是图像。因此,您可以先执行一些完整性检查:扫描前几个字节以查看文件是否包含相关图像 header 签名 - 所有相关图像格式都有这些。

“签名 header ”可帮助您决定文件试图模拟哪种图像格式。在下一步中,您可以检查其余内容是否符合基础图像格式。这将向您保证该文件确实是该特定格式的图像文件。

但即便如此,该文件仍可能以某种方式精心制作,当您显示图像时,用于显示该图像的流行库(例如 libpng 等)会遇到攻击者在该库中发现的缓冲区溢出.

不幸的是,除了根本不允许来自客户端的任何输入之外,没有办法主动阻止这种情况。

关于php - MIME 类型欺骗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8028184/

相关文章:

php - CodeIgniter不使用image_lib添加水印

php - 使用 ajax 更新不适用于数据表和 codeigniter

security - 网络抓取工具能否绕过良好的 throttle 保护?

c# - 无法使用 DirectorySecurity 工具删除文件夹权限(访问规则)

php - 考虑到性能,我应该如何将 XML、JSON 与 MYSQL DB 混合使用

html - 如何设置标题背景以适本地适应

javascript - 在javascript中下拉子菜单

html - sup 标签在 title 标签内不起作用

c# - 如何确保仅供特定用户下载的链接?

php - 从变量中提取第一个数字