【发布时间】:2012-08-10 11:10:56
【问题描述】:
我有一个应用程序,用户应该能够上传各种各样的文件,但我需要知道每个文件是否可以安全地将其文本表示形式显示为纯文本。
使用python-magic点赞
m = Magic(mime=True).from_buffer(cgi.FieldStorage.file.read())
给我正确的 MIME 类型。
但有时,脚本的 MIME 类型是 application/*,因此仅查找 m.startswith('text/') 是不够的。
Another site 建议使用
m = Magic().from_buffer(cgi.FieldStorage.file.read())
并检查'text' in m。
第二种方法对于上传任意文件的集合是否足够可靠,或者有人可以给我另一个想法吗?
非常感谢。
【问题讨论】:
-
检查文件扩展名是否足够好?
-
如果你有一套相当明确的标准,我会避开
file/magic,因为它的启发式有时会以特殊的方式失灵。如何检查没有长时间运行的不可打印字符,检查行长度是否正常,并在显示之前用实体替换任何看起来像 HTML 的内容? -
@InbarRose,在这种情况下我不会相信用户的文件名...
-
@tripleee 检查不可打印的字符似乎是另一个信仰问题。你有什么建议吗?
-
@moschlar:检查行长并在文件的第一行中搜索 ascii bellow 0x20 - 永远不要相信用户输入。
标签: python file-upload mime-types mime python-magic