0

_form には、ファイルをアップロードするフィールドがあります。私がやろうとしているのは、ファイルに危険な拡張子が含まれているかどうかを確認することです。

私の場合、拡張子が次のいずれかの場合、エラー メッセージが返されます。'バット'。'と'。'EXE'。'src',. 「コマンド」

だから私はこれをしました:

def suspitious_attachment        
  if ends_with? '.bat', '.com', '.exe', '.src', '.cmd'
    errors.add(:base, I18n.t('errors.messages.suspitious_attachment', :value => attachments.split(".").last))
  end
end

しかし、それは良い考えではありません。ファイルの名前に複数のドットを含めることができます。

だから私は名前の最後の4文字を取得したいと思います.

私はこれを行うことができません、私を助けてくれますか?

私の英語でごめんなさい。

4

2 に答える 2

3

[-4..-1]またはを使用できます[-4, 4]

'this.is.really.dangerous.file.exe'[-4..-1]
# => ".exe"
'this.is.really.dangerous.file.exe'[-4, 4]
# => ".exe"
'a_file.rb'[-4..-1]
# => "e.rb"

ただしFile::extname、ファイル名を取得する方が適切です。

File.extname 'a_file.cmd'
# => ".cmd"
File.extname 'a_file.rb'
# => ".rb"
File.extname 'this.is.really.dangerous.file.exe'
# => ".exe"
于 2013-10-31T03:35:50.147 に答える
2

あなたはここで誤った安心感に陥っています。ファイルの名前を確認しても、誰かが偽の拡張子を持つファイルをアップロードするのを防ぐことはできません。

ファイル形式を確認する必要がある場合は、代わりに MIME タイプを確認する必要があります。

詳細はこちら: Railsにアップロードされたファイルタイプをチェックインするには?

于 2013-10-31T03:56:20.100 に答える