锁定老帖子 主题:MIME类型-服务端验证上传文件的类型
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2008-09-19
最后修改:2009-02-11
MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。 web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类。 Tomcat的安装目录\conf\web.xml 中就定义了大量MIME类型 ,你可也去看一下。
最近在做用表单上传文件,想在服务端验证上传文件的类型,只允许上传GIF,JPG,ZIP, 我们有两种方法, 第一:检查文件的扩展名, 第二:检查文件的MIME类型 。 检查文件的扩展名的方法,很简单快捷, 但是 a.jsp 改名为 a.jpg能可以绕过检查上传了。 检查文件的MIME类型的方法,在IE7与Firefox下有一点区别(见下表), 有不同浏览器上传表现不一致。Firefox下ZIP与EXE文件的MIME类型同为application/octet-stream。
所以我决定 两种方法结合使用,先检查扩展名, 再检查MIME,不合格的文件不让上传。
表中例出的是在服务器端(tomcat5.5)接收不同浏览器上传的文件时,取得的MIME类型
常见MIME类型例表:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-01-07
此文对我颇有帮助,收藏了仔细看.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-01-07
疑惑。
我如果把一个a.jsp文件改名为a.jpg上传,mime是text/html还是image/gif?难道浏览器会判断该文件的真正类型? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-01-07
yiyu 写道 疑惑。
我如果把一个a.jsp文件改名为a.jpg上传,mime是text/html还是image/gif?难道浏览器会判断该文件的真正类型? 虽然没试过,但应该不会~ 浏览器应该没那么强大~ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-01-09
引用 疑惑。
我如果把一个a.jsp文件改名为a.jpg上传,mime是text/html还是image/gif?难道浏览器会判断该文件的真正类型? 不是浏览器会判断该文件的真正类型, 而是上传后,在服务端判断. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-01-09
elf8848 写道 引用 疑惑。
我如果把一个a.jsp文件改名为a.jpg上传,mime是text/html还是image/gif?难道浏览器会判断该文件的真正类型? 不是浏览器会判断该文件的真正类型, 而是上传后,在服务端判断. yiyu说的情况是:你所取得的mime是浏览器提供的,包含在request。也就是这个数据源来自客户端的声明。而客户端是“按照文件扩展名来确定mime”,因此容易欺骗。 因此你说的 上传后 在服务器端 判断 ,除非你真的开了个 java.io.File 去读文件头,否则mime type也不是可信任的来源。 引号中内容我未求证。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-01-09
经过求证,浏览器有读取文件内容。不受扩展名欺骗。
Content-Disposition: form-data; name="file"; filename="c:\a.gif" Content-Type: text/plain ddd |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-01-09
哦,看样子我又想当然了~
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-01-09
tiyi 写道 经过求证,浏览器有读取文件内容。不受扩展名欺骗。
Content-Disposition: form-data; name="file"; filename="c:\a.gif" Content-Type: text/plain ddd 这个也不靠谱的,你可以多试几种文件类型看看。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-01-09
确实是不稳定。
UTF-8的XML文件(也就是文本文件) Content-Disposition: form-data; name="file"; filename="C:\wxl.zip" Content-Type: application/octet-stream RAR文件 Content-Disposition: form-data; name="file"; filename="C:\AKM-084.txt" Content-Type: text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||