【问题标题】:Verify an uploaded .FLA isn't malicious验证上传的 .FLA 不是恶意的
【发布时间】:2011-08-20 04:01:37
【问题描述】:

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

这很有效,但有一个例外:.FLA(Flash 电影创作)文件。不幸的是, finfo_file 无法解析这些文件的 MIME 类型。相反,它会返回这个有点误导的错误消息:

“CDF V2 文档,损坏:无法读取摘要信息”

(我验证了我正在使用的测试 .FLA 实际上并没有损坏。)

显然只检查扩展名是不够的,因为有人要做的就是给恶意脚本一个 .FLA 扩展名来绕过我的保护措施。我还能做些什么来最大限度地提高上传的 .FLA 文件的安全性? (系统必须支持 .FLA 上传 - 这是不可协商的。)

【问题讨论】:

    标签: php flash file-upload mime-types


    【解决方案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 中创建的文件,它不能始终如一地工作。

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

    【讨论】:

    • 这是一个非常聪明的技巧,但不幸的是,我确实需要支持在旧版本的 Flash 中创建的文件。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 2017-06-17
      • 2018-08-02
      • 2012-03-30
      • 2017-01-29
      • 2013-01-23
      • 2011-02-03
      相关资源
      最近更新 更多