我正在使用Rails开发Web应用程序,该用户可以上传包含其数据/文件/文档等的zip文件。但是我现在出于安全考虑,我想扫描上传的zip文件并删除各种可执行文件,例如exe, bash and etc
,我该怎么做?
编辑:我知道clamav
的Rails API,但是它只会扫描文件中的恶意文件而不删除可执行文件,想象一下在服务器中打开错误的上载可执行文件以及此操作服务器的成本/整个企业!
答案 0 :(得分:0)
首先,将允许的文件类型列入白名单,而不是将不允许的文件类型列入黑名单(例如可执行文件),将更好,更可靠。因此,如果您的应用程序可能的话,应该列出允许的类型。
然后,问题是如何确定文件的类型。
简单的方法是检查文件扩展名,但这不是很强大。最好进行第一次检查,以免花费宝贵的CPU时间进行进一步检查。
之后,您可以使用filemagic数据库非常可靠地找到上载文件的类型。您有两种选择:
如果应用程序在Linux上运行,则可以直接调用file
工具,类似于filetype = `file -Ib #{filename}`
来获取文件类型。请注意,此示例中的filename
需要进行清理,以避免OS命令注入!
如果您也想支持Windows(或者只是想避免调用shell命令并拥有更好的代码),则可以使用ruby-filemagic
gem:
require 'filemagic'
filename = 'yourfile.ext'
magic = FileMagic.new
filetype = magic.file(filename)
ruby-filemagic
的问题在于它不再维护,但是找到可执行文件仍然可以正常工作。