为了确定附件的文件类型,我使用了操作系统“文件”实用程序:
class AttachedFileTypeValidator < ActiveModel::Validator
def validate(record)
file = record.resource.uploaded_file
attached_file = Rails.root + file.path
file_type = `file #{attached_file}`
Rails.logger.info "Attached file type determined to be: #{file_type}"
unless file_type.split(',').first =~ /ASCII|UTF/
record.errors[:resource_content_type] << "Attachment does not appear to be a text CSV file, please ensure it was saved correctly."
end
end
end
不幸的是brakeman表明了它的命令行注入机会。我假设这意味着有人为一个文件找出一个聪明的名字,如:
; rm -rf /;
我们离开了。什么是清理文件名的好方法?
答案 0 :(得分:3)