代码之家  ›  专栏  ›  技术社区  ›  dariush Rizwan

检测并删除上载的zip文件中的所有可执行文件

  •  1
  • dariush Rizwan  · 技术社区  · 6 年前

    我正在使用Rails开发一个Web应用程序,用户可以上传一个包含数据/文件/文档等的zip文件,但我现在关心的是安全性,我想扫描上传的zip文件并删除所有类型的可执行文件,例如 exe, bash and etc 我该怎么做?


    编辑:我知道 clamav API for Rails,但它只会扫描文件中的恶意文件,而不会删除可执行文件,想象一下在服务器中打开一个错误上载的可执行文件,以及此操作服务器/Business Wide的成本!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Gabor Lengyel    6 年前

    首先,允许使用白名单的文件类型和不允许使用黑名单的文件类型(如可执行文件)会更好、更健壮。因此,如果应用程序中允许的话,您应该有一个允许的类型列表。

    那么问题是如何确定文件的类型。

    简单的方法是检查文件扩展名,但这不是很强。为了避免在进一步检查上花费宝贵的CPU时间,第一次检查可能仍然是好的。

    之后,您可以使用filemagic数据库非常可靠地找到上载文件的类型。您有两种选择:

    • 如果应用程序在Linux上运行,则可以调用 file 直接使用工具,比如 filetype = `file -Ib #{filename}` 获取文件类型。注意 filename 在本例中,需要进行消毒以避免操作系统命令注入!

    • 如果您也想支持Windows(或者只是想避免调用shell命令并拥有更好的代码),可以使用 ruby-filemagic 宝石:

    require 'filemagic'
    filename = 'yourfile.ext'
    magic = FileMagic.new
    filetype = magic.file(filename)
    

    问题在于 鲁比·菲尔马奇 它不再被维护了,但找到可执行文件可能仍然可以正常工作。