验证上载的 .FLA 不是恶意的



我正在开发一个基于php的项目管理系统,允许用户上传各种媒体文件。为了防止用户上传恶意文件,系统针对白名单验证MIME类型(使用finfo_file)和扩展名(使用pathinfo)。

这工作得很好,只有一个例外:. fla (Flash电影制作)文件。不幸的是,finfo_file不能解析这些文件的MIME类型。相反,它返回这个有点误导人的错误消息:

"CDF V2文档已损坏:无法读取摘要信息"

(我验证了我使用的测试。flas实际上没有损坏。)

显然只检查扩展名是不够的,因为所有人要做的就是给恶意脚本一个。fla扩展名来绕过我的保护措施。我还可以做些什么来最大限度地保证上传的。fla文件是安全的?(系统必须支持。fla上传——这是没有商量余地的。)

可以将它们限制为CS5 FLA吗?因为这些都是内容相当简单的压缩文件。你可以调用以下命令:

<?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或cs4中创建的文件。

当然,您应该确保您的服务器上没有任何可以打开任何形式的adobecreativesuite文件的东西。并向客户推荐杀毒软件

据我所知,finfo_file只是给了你mime/类型,它很容易被欺骗或愚弄,就像你说的扩展更改。处理这个问题的更好方法是获得真正的防病毒解决方案并将其安装在服务器上。问题是不知道扫描何时完成。您可以很容易地让大多数防病毒产品通过给它正确的命令行参数对文件执行扫描,但真正的问题是知道扫描何时完成。

最新更新