添付ファイルのファイル タイプを判別するために、OS の「ファイル」ユーティリティを使用しました。
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
残念ながら、 breakmanはコマンド ライン インジェクションの機会を示唆しています。これは、誰かが次のようなファイルの巧妙な名前を見つけたことを意味すると思います。
; rm -rf /;
そして、私たちは行きます。ファイル名をサニタイズする良い方法は何ですか?