使用最新的WordPress2.9.2,发现不能上传rar附件。搜索了一下,找到一个插件PJW Mime Config可以解决此问题。

其设置界面如下:

WordPress不让上传.rar格式附件的原因及解决办法

 

其中ac3、mpa、flv是插件自带的设置,rar那行是我添加上去的。问题是添加时除了要填扩展名(File Extension)还得填Associated mime-type。蒙着瞎填了一个rar/rar,测试可以上传rar格式的附件了。可不放心,google了一下rar mime,找到下面的文字。

注意:经测试,本情况发生在少量配置有问题的服务器上,一般正式版apache无此问题。
一般的网站都会开放rar附件上传,并可能会保留原来文件名称,这从而可能导致一个很严重的问题,xxx.php.rar文件会被Apache当作php文件来执行, 造成极大的安全隐患。
    如何测试?将你的某个php程序文件后缀名修改成 xxx.php.rar ,这时测试一下,还是按照PHP文件解析执行,Apache并不会认为这是一个rar文件,这是为什么呢?
    原来,每遇到一种后双重后缀名(如xxx.php.rar)的文件,Apache都会去conf/mime.types 文件中检查最后一个后缀,如果最后一个后缀并没有在mime.types文件中定义,则使用前一个后缀来解释,因为在默认情况下,rar并未在mime.types中定义,故Apache会使用php后缀来解释文件,这就是漏洞的原因所在。
    由此类推,如果使用xxx.jsp.ppp.rar 则会认为是jsp文件,如果修改成xxx.shtml.rar ,则会识别成shtml文件。a.php.c.d.e.rar 也是会被当成PHP文件解释的!想想,不知道有多少网站存在这个问题?
    那么针对网络管理员,如何杜绝这个隐患?
1、修改mime.types文件,在最后面加一条:
    application/rar            rar
    然后重新启动Apache,即可。
   针对WEB管理员及WEB程序开发者,如何更安全?
1)只允许上传指定后缀名的文件,当然,要禁止掉rar格式文件上传。(但这条往往行不通,一般的网站都需要上传rar文件)
2)对上传后的文件进行强制重命名, 强制使用最后一个扩展名,如原始文件名为xxx.php.rar ,上传后强制重命名为 20080912.rar即可避免这个隐患。
   早期版本的phpcms 2007,discuz,ecshop都存在这个漏洞,或许你的网站被挂马,就是因此引起。

上面的文章是转载的,测试了一下,还真这样,不过修改mime.types是没有用的。
需要在http.conf中加入下面这些内容:
AddType application/rar .rar
AddType application/x-compressed .rar
AddType application/x-rar .rar
AddType application/x-rar-compressed .rar
AddType application/x-rar-compressed; application/x-compressed .rar
AddType compressed/rar; application/x-rar-compressed .rar
这样就不会出问题了,测试过了,加上面这些是没有问题的。

看来WordPress禁掉rar作为附件上传是有其道理的,而PJW Mime Config也确实比很多靠取消文件格式校验来实现rar文件上传的办法要严谨的多,前提是,你认认真真填写了Associated mime-type。

我一直认为网站的文件下载应该使用zip格式,这样不但安全,而且windows系统可以不借助任何软件直接解压。由于还是对网上文字的权威性抱有怀疑,我决定今后还是按照WordPress的规定走,不打开rar文件格式的上传。

————————————————————————————————

今儿研究了一天的WordPress,真是相见恨晚。
本来,我看中WordPress的最首要之处,只在于其多到令人叹为观止的主题模板。可试用之后却发现,wp实在不简单,原来博客应该是这个样子滴,这才叫真正的博客平台嘛!
google趋势上有关WordPress搜索量的统计,从04年到现在一路攀升。可以说WordPress与blog文化相伴,对Web 2.0的高速发展起到了不可替代的推动作用。