还是先把2.0.7 RC1用上吧

wordpress2.0.6刚出不久就有feedburner bug,现在又有hacker发现2.0.6的SQL注入漏洞
别不信邪,还是先用着wordpress2.0.7RC1吧。

WordPress2.0.7RC1 change:
1. worked around a PHP bug for PHP4 < 4.4.3 and PHP5 < 5.1.4 with
register_globals ON

that could lead to SQL injection or other security breaches
2. Feeds should properly show 304 Not Modified headers (a.k.a. the
FeedBurner bug)
instead of mismatched 200/304 headers
3. Backport of another 304 Not Modified fix from trunk (Etag
mismatch on certain hosts would
cause 200 OK and content to always be served, a waste of bandwidth)
4. Deleting WP Pages no longer gives an “Are You Sure?” prompt
5. After deleting a WP Page, you are properly redirected to the Edit
Pages screen
6. Sending an image at original size in IE no longer adds an
incorrect “height” attribute

wordpress升级至2.0.6

升级至2.0.6,过程是极其痛苦的。
为何痛苦?都是地震惹得祸。
最后还是使用SSH(在那些痛苦经历过后,才去support那里问,怎样玩SSH。他回答我说只要在users那里edit用户,选上ssh就可以了,没有说要身份证明?一试,还真行。),三条Shell命令就能把升级搞定。

wget http://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
cp -rpf ./wordpress/* ./your-wp

紧跟wordpress更新,也更新到0.74。
升级完wordpress,也装上了bbpress。用SSH,那个快啊。(一两秒的事情,900kb+/s)

wget http://bbpress.org/latest.tar.gz
tar -xzf latest.tar.gz
cp -rpf ./bbpress/* ./bbs

更多阅读:
1、当然目录要先用cd到域名目录下。
2、wordpress 2.0.5升级到2.0.6?升级 WordPress 2.0.5 到 2.0.6 的步骤
3、初玩SSH?shell使用指南
4、2.0.6也有bug,wordpress 2.0.6的feedburner bug

wordpress 2.0.6的feedburner bug

刚在昨天发布的wordpress 2.0.6,就有人发现此版本的wordpress有个feedburner bug。
大概的意思是说当升级到2.0.6或2.1后,你的feedburner feed将会返回“invalid xml”错误。

具体原因和解决方法看:
英文原版,WordPress 2.0.6 and FeedBurner Disconnects
繁体中文翻译版:WordPress 2.0.6 對 FeedBurner 的 bug

wordpress 2.0.6

wordpress 2.0.6发布了!更新信息如下:
补上了一个安全漏洞
HTML quicktags可以在Apple浏览器Safari上正常使用;
格式化留言,防止它们破坏blog布局;
PHP/FastCGI安装兼容性调整。

为解决这个安全漏洞添加了attribute_escape()函数。
还增加了名为“query”的filter。

下载wordpress2.0.6
Dev Blog: WordPress 2.0.6

修补wordpress的受攻击弱点

多个版本的wordpress都有这个受攻击弱点。

WordPress WordPress (B2) 0.6.2 .1
WordPress WordPress (B2) 0.6.2
WordPress WordPress 2.0.5
WordPress WordPress 2.0.4
WordPress WordPress 2.0.3
WordPress WordPress 2.0.2
WordPress WordPress 2.0.1
WordPress WordPress 2.0
WordPress WordPress 1.5.2
WordPress WordPress 1.5.1 .3
WordPress WordPress 1.5.1 .2
WordPress WordPress 1.5.1
WordPress WordPress 1.5
WordPress WordPress 1.2.2
WordPress WordPress 1.2.1
+ Gentoo Linux
WordPress WordPress 1.2
+ Gentoo Linux 1.4
+ Gentoo Linux
WordPress WordPress 0.71
WordPress WordPress 0.7

但这个弱点已经在2.0.6中修补,但当前流行使用的版本为2.0.5,所以大家还是自己补上吧:
我翻了一下我保存的各个版本的wordpress,不知道为什么也找不到原文中提到的代码。(wordpress应该是没有attribute_escape()函数的)
2.0.5中应该是这样修补的:
打开 your-wordpress/wp-admin/templates.php (应该在114行),找到

echo "<li><a href='templates.php?file=" . wp_specialchars($recent, true) . "'>" . get_file_description(basename($recent)) . "</a></li>";

修改为

echo "<li><a href='templates.php?file=" . wp_specialchars($recent, true) . "'>" . wp_specialchars(get_file_description(basename($recent))) . "</a></li>";

wordpress-1[1][1].5.2、2.0 RC2、2.0.2 – 2.0.4的templates.php原代码是这样的,

echo "<li><a href='templates.php?file=$recent'>" . get_file_description(basename($recent)) . "</a></li>";

修改为

echo "<li><a href='templates.php?file=" . wp_specialchars($recent, true) . "'>" . wp_specialchars(get_file_description(basename($recent))) . "</a></li>";

打开 your-wordpress/wp-admin/templates.php ,找到

echo "<li><a href='templates.php?file=" . attribute_escape($recent) . "'>" . get_file_description(basename($recent)) . "</a></li>";

修改为

echo "<li><a href='templates.php?file=" . attribute_escape($recent) . "'>" . wp_specialchars(get_file_description(basename($recent))) . "</a></li>";

查看更多:WordPress Template.PHP HTML Injection Vulnerability
跨站脚本攻击(XSS)FAQ

抵御留言spam

关掉Bad Behavior后,Akismet平均每天能拦截下六七十个spam,让人极其不爽。
所以又开始关注抵御spam的plugin和hack。最近香港的wordpress user提到的解决方法之一,使用.htaccess编辑rewrite规则,可将spam拒之门外。但使用到.htaccess,也注定这个方法具有一定的危险性,一不留神,可能是500报错。
在逛v2ex时得到一个启发,得出一种抵御留言spam不错的方法,经过一天的试验,可以基本保证留言spam不再发生。但此方法只能抵御留言spam,不能抵御trackback和pingback。
原理就是spam留言机器人,是不会打开javascript的。所以如果你关闭了javascript将无法在冰古blog中留言了。
由下图可看到akismet收集到的spam都是trackback
fight comment spam

修改方法:
在模板comments.php页中查找textarea标签,如冰古blog的:

<p><textarea name="comment" id="comment" cols="70" rows="10" tabindex="4"></textarea></p>

用下面的代码覆盖:

<script type="text/javascript"><!--
document.write("<p><textarea name=\"comment\" id=\"comment\" cols=\"70\" rows=\"10\" tabindex=\"4\"></textarea></p>");
  //--></script>

DONE!

BTW,冰古blog也用上了ajax留言
Update:看来这个还不是很完美,第二天出现了留言spam。但两天的spam总数为21,已经大大改善。

怎样将wordpress从盘古搬到DreamHost

第二次在不同空间商间搬家,本以为是驾轻就熟的事,但实际操作起来却花费了不少时间。其中有自己对新空间操作面板的不熟,也是自己想熟悉DreamHost提供的各种工具。

不罗嗦熟悉工具的过程,让我们直接到怎样将wordpress盘古搬到DreamHost吧。
1、备份
登陆到盘古的cpanel中,用cpanel中的备份工具将整个虚拟空间备份、下载。(这里是为保证你在DreamHost与原空间相同)
2、将下载后的备份文件解压
你需要上传到DreamHost的文件都位于backup-xx.xx.xxxx_xx-xx-xx_yourid/homedir/public_html(此处不要使用www文件夹)
但先不忙上传。
3、登陆dreamhost控制面板,Domains -> Manage Domains中点击Add New Domain / Sub-Domain添加你的域名。添加后提示你需要修改域名的DNS为DreamHost的DNS,但这时先不忙修改。(dreamhost为每个虚拟空间提供一个免费的顶级域名。在注册空间时,我选择了注册DreamHost的二级域名。理由是,当你不使用DreamHost的空间时:转出域名可能要费一番周折;或你选择在DH续费域名,但这时你需要支付$9.95)
4、Goodies -> One-Click Installs 选择你的域名与相应的文件夹例如我的域名:bingu.net和blog文件夹:blog,然后简单地按下Install it for me now!
你用二级域名访问你的wordpress?再次在Domains -> Manage Domains添加你需要的二级域名吧。
5、导入数据库:
登陆你的phpMyAdmin(位于 Goodies -> Manage MYSQL),选择在第4步添加的数据库,在右栏选择“操作”,将其中的“整理”选择为“utf8_general_ci”后执行。
选择“Import”,将你的“sql备份”导入进去。
6、修改wordpress文件:
打开yourwpfolder/wp-includes/wp-db.php

$this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);
$this->query("SET NAMES 'utf8' ");           //加入此行!

7、上传其他文件:
你的wordpress自己修改过了?除了wordpress你还有其他文件?将他们打包成.zip,用DH提供的net2Ftp上传吧。(建议每个包不大于2mb!压缩包里的内容将直接解压到上传的文件夹中,务必选上Use Folder Names…
net2Ftp上传压缩包后自动解压
8、现在去修改域名的DNS吧,数小时后你的wordpress就悄悄地转移到DreamHost上了。

如何在wordpress显示摘要

一个初使用wordpress的同学都会问的问题,如何在wordpress的首页中只显示文章的摘要?
在不使用任何hack和plugin的情况下,有两种方式可以实现:

使用the_excerpt标签
使用方法Read More »