sga*_*a62 3 python django audio file-upload file
可能重复:
Django(音频)文件验证
我正在构建一个Web应用程序,用户可以上传媒体内容,包括音频文件.
我的AudioFileUploadForm中有一个干净的方法验证以下内容:
但是,我担心安全问题.用户可以上传带有恶意代码的文件,并轻松传递上述验证.我接下来要做的是确认音频文件确实是一个音频文件(在写入磁盘之前).
我该怎么做?
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")
Run Code Online (Sandbox Code Playgroud)
编辑:通过"验证音频文件确实是一个音频文件",我的意思是:
包含音频文件典型数据的文件.我担心用户可以上传带有适当标题的文件,并使用恶意脚本代替音频数据.例如...... mp3文件是mp3文件吗?或者它包含一些与mp3文件不同的东西?
另一个发布的答案可以header解析.这意味着有人仍然可以在有效标头后面包含其他数据.
是验证整个文件哪个成本更高的CPU,但也有更严格的政策.可以执行此操作的库是python audiotools,相关的API方法是AudioFile.verify.
像这样使用:
import audiotools
f = audiotools.open(filename)
try:
result = f.verify()
except audiotools.InvalidFile:
# Invalid file.
print("Invalid File")
else:
# Valid file.
print("Valid File")
Run Code Online (Sandbox Code Playgroud)
一个警告是,这种verify方法是非常严格的,而且实际上严重标志编码的文件为无效.您必须自行决定这是否适合您的用例.
| 归档时间: |
|
| 查看次数: |
2834 次 |
| 最近记录: |