无组件上传文件-判断文件类型?

作者:vkvi 来源:ITPOW(原创) 日期:2009-10-11

有人认为,客户端明明是个 ASP 文件或 EXE 文件,却把扩展名改为 .jpg 来上传,这是不安全的。

于是不通过判断文件扩展名来进行判断,我见过的方法有很多。一是判断通过解析二进制文件,判断文件头是否是图片标志;二是保存文件,然后用判断其中是否有 getfolder、createfolder 这些词。

这两种方法都不准。对于法一,如果图片文件头的确是图片,可是后面图片数据后面隐藏 exe 文件数据,还不是照样把 exe 上传了。对于法二,如果程序中使用的是 eval("fso.get" & "folder()"),便绕开了判断。

所以避免受到上传文件的威胁,最重要的还是保障上传的文件不能被直接或间接执行,比如我们禁止上传 asp 文件,允许上传 txt 文件,即使 txt 文件是 asp 代码,但 IIS 默认不会对 .txt 扩展名的文件启用 ASP 解析引擎,所以也就得不到执行。

相关文章