3

添付ファイルのファイル タイプを判別するために、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 /;

そして、私たちは行きます。ファイル名をサニタイズする良い方法は何ですか?

4

1 に答える 1

3

IO#popenを使用して外部コマンドを呼び出します。

file_type = IO.popen(['file', attached_file]).read

これにより、ファイル名の変な文字が適切にエスケープされます。

于 2012-06-23T03:14:06.970 に答える