我正在开发一个基于PHP的项目管理系统,允许用户上传各种媒体文件。为防止用户上传恶意文件,系统会针对白名单验证MIME类型(使用finfo_file)和扩展名(使用pathinfo)。
这很好用,但有一个例外:.FLA(Flash电影制作)文件。不幸的是,finfo_file无法解析这些文件的MIME类型。相反,它会返回这个有点误导性的错误消息:
“CDF V2文件,损坏:无法阅读摘要信息”
(我验证了测试。我正在使用的FLAs实际上并没有腐败。)
显然只检查扩展名是不够的,因为所有人都必须做的是为恶意脚本提供.FLA扩展以绕过我的安全措施。我还能做些什么来最大化上传的.FLA文件安全的可能性? (系统必须支持.FLA上传 - 这是不可协商的。)
答案 0 :(得分:1)
据我了解,finfo_file只是给你一个mime /类型,很容易被欺骗或欺骗,就像你说的扩展更改一样。处理此问题的更好方法是获取真正的防病毒解决方案并将其安装在您的服务器上。问题在于知道扫描何时完成。您可以轻松地让大多数防病毒产品通过为其提供正确的命令行参数来对文件执行扫描,但真正的问题是知道扫描何时完成。
答案 1 :(得分:1)
你能将它们限制在CS5 FLA吗?因为这些是具有相当简单内容的zip文件。您可以拨打以下电话:
<?php
$za = new ZipArchive();
$arr = array();
$za->open('D:\\path\\to\\file.fla');
for( $i = 0; $i < $za->numFiles; $i++ ){
$stat = $za->statIndex( $i );
$arr[] = $stat['name'];
}
?>
那应该给你这些(至少):
mimetype
LIBRARY
META-INF
DOMDocument.xml
metadata.xml
PublishSettings.xml
MobileSettings.xml
SymDepend.cache
问题在于,这仅适用于CS5,并且对于在CS3或4中创建的文件不一致。
当然,您应该确保阻止您的服务器拥有任何可以打开任何表单的Adobe Creative Suite文件的内容。并向您的客户推荐抗病毒药物。