2013-10-31 4 views
0

_form에는 파일을 업로드 할 필드가 있습니다. 내가 시도한 것은 파일에 위험한 확장자가 포함되어 있는지 확인하는 것입니다.이름의 마지막 4 글자를 얻는 방법

내 경우에는 확장자가 다음 중 하나 인 경우 오류 메시지를 반환합니다. . '박쥐'. '와'. '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 

하지만 파일 이름에 여러 개의 점을 가질 수있는 좋은 생각이 아니다 'cmd'를

그래서 내가 이런 짓을.

그래서 이름의 마지막 4자를 얻고 싶습니다.

내가 할 수 없습니다. 도와주세요.

영어로 죄송합니다.

+0

마지막 네 글자를 확인하는 것이 어떻게 다른가요? – sawa

답변

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" 
2

여기에 잘못된 보안 의식이 있습니다. 파일 이름을 확인해도 누군가가 가짜 확장자를 가진 파일을 업로드하는 것을 막을 수는 없습니다.

파일 형식을 확인해야하는 경우 대신 MIME 형식을 확인해야합니다.

더 자세히보기 : How to check in rails uploaded file type?

관련 문제