可能重复:
Django的(音频)文件验证
我建立一个web应用程序,让使用者可以上传的媒体内容,包括音频文件。
我有我的AudioFileUploadForm清洁方法验证以下内容:
- 该音频文件不是太大。
- 该音频文件有一个有效的content_type(MIME类型)。
- 该音频文件有一个有效的扩展。
不过,我担心安全 。 用户可以上载带有恶意代码的文件,并且容易地通过上述验证。 我想接下来做的就是验证音频文件,着实的音频文件(其写入磁盘之前)。
我应该怎么办呢?
class UploadAudioForm(forms.ModelForm):
audio_file = forms.FileField()
def clean_audio_file(self):
file = self.cleaned_data.get('audio_file',False):
if file:
if file._size > 12*1024*1024:
raise ValidationError("Audio file too large ( > 12mb )")
if not file.content_type in ['audio/mpeg','audio/mp4', 'audio/basic', 'audio/x-midi', 'audio/vorbis', 'audio/x-pn-realaudio', 'audio/vnd.rn-realaudio', 'audio/x-pn-realaudio', 'audio/vnd.rn-realaudio', 'audio/wav', 'audio/x-wav']:
raise ValidationError("Sorry, we do not support that audio MIME type. Please try uploading an mp3 file, or other common audio type.")
if not os.path.splitext(file.name)[1] in ['.mp3', '.au', '.midi', '.ogg', '.ra', '.ram', '.wav']:
raise ValidationError("Sorry, your audio file doesn't have a proper extension.")
# Next, I want to read the file and make sure it is
# a valid audio file. How should I do this? Use a library?
# Read a portion of the file? ...?
if not ???.is_audio(file.content):
raise ValidationError("Not a valid audio file.")
return file
else:
raise ValidationError("Couldn't read uploaded file")
编辑:通过“验证音频文件,着实音频文件”,我指的是以下几点:
包含典型的音频文件的数据的文件。 我很担心,用户可以上传与相应的头文件和恶意脚本的音频数据的地方。 例如......是MP3文件的MP3文件? 或者它包含一些不寻常的一个mp3文件吗?