安全地允许通过 MIME TYPES / fil 上传网络字体(ttf、eot、svg、woff、otf)
Posted
技术标签:
【中文标题】安全地允许通过 MIME TYPES / fil 上传网络字体(ttf、eot、svg、woff、otf)【英文标题】:Safely allow upload of web fonts (ttf, eot, svg, woff, otf) via MIME TYPES / fil 【发布时间】:2011-09-05 06:25:30 【问题描述】:我正在尝试通过检查 mime 类型来允许在我们的应用程序中安全上传网络字体。这适用于我们允许的大多数类型的文件,但对于网络字体来说这是一个问题。
我们使用 php 的 http://php.net/manual/en/book.fileinfo.php 来检查 mime-type
问题在于 php 会将所有 Web 字体检测为 mime “application/octet-stream”,但如果允许这样做,将允许 .exe 或许多其他可能危险的文件上传。
处理此类文件上传的最佳方式是什么?
【问题讨论】:
【参考方案1】:找到一个包含字体格式信息的魔法文件,并将其传递给finfo_open()
。
【讨论】:
在 /usr/share/ 中找到了该文件,如何使用字体格式更新该文件? 从最新的file 获取。您需要运行configure
,然后进入magic/
并在那里运行make
以生成文件。
问题是我们正在运行 CentOS 并且不想绕过 yum
你不需要。只需将您的魔法文件放在其他地方并明确引用它。
好的,谢谢,我会试试的。是否有版本文件说明文件命令magic.mime 文件中支持哪个版本的网络字体?【参考方案2】:
我不依赖 PHP 中内置的 mime 检查器。我总是和他们有问题。如果你运行的是 linux,使用 PHP 的 exec 命令在 bash 中执行 mimetype 命令并返回给 PHP。
【讨论】:
这将是一个选项,但我们必须在 PHP 中打开 exec,出于安全目的,它现在被阻止【参考方案3】:你应该使用phpinfo检查扩展名,mime类型可以是假的,你可以得到一个pdf的mime类型的.php文件。
编辑
$file = "abc.ttf";
if(in_array(strtolower(pathinfo(file, PATHINFO_EXTENSION)), array("ttf")))
// OK
你可以为数组添加更多扩展
【讨论】:
您如何可靠地检测 TTF 文件,您是否有示例或链接说明如何完成该操作? 我已经在我的 anwser 中添加了一个示例 谢谢,但如果我将文件 abc.ttf 重命名为 abc.exe,这会给我“exe” 是的,但这是最安全的方法。 如果用户可以简单地重命名文件并将任何内容上传到服务器,这怎么可能是最安全的方式。至少 MIME 类型检查文件的实际内容,使其比仅检查文件扩展名更安全?【参考方案4】:如果 TTF 文件是唯一允许上传的文件,请使用: http://www.phpkode.com/scripts/item/ttf-info-plus/
【讨论】:
还有 OTF、SVG 和其他网络字体需要上传。事实上,我们希望将来能够允许任何类型的文件,只要我们至少可以根据 MIME 类型验证其内容以上是关于安全地允许通过 MIME TYPES / fil 上传网络字体(ttf、eot、svg、woff、otf)的主要内容,如果未能解决你的问题,请参考以下文章
在哪里可以获得 mime.types 文件的副本? [关闭]