修补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

还是关于总结2006年的SQL

最近在看关于SQL的资料,这里再来几条SQL语句练习一下。

2006年度最多comment(&trackback&pingback)的posts

SELECT ID, Count( comment_ID ) , post_title
FROM `wp_comments` , `wp_posts`
WHERE comment_post_ID = ID
AND comment_approved = '1'
AND post_date >= '2006-01-01'
AND post_date < '2007-01-01'
GROUP BY ID
ORDER BY 2 DESC

1、更新blogbus to wordpress转换程序 (43 comments)
2、从blogbus跳转到WordPress (31 comments)
3、wordpress2.0 rss import文件分析及oblog导入 (18 comments)
4、我使用的plugins (17 comments)
5、怎样将wordpress从盘古搬到DreamHost (16 comments)

暂时还没想到更多的SQL,想好了再加吧。

Happy New Year!

昨天开始,网络已经慢慢地好了,至少我这里的情况是这样的,不用代理也可以进入DreamHost。
这本应该是昨天要写的一个post。却因为手上没有更多的数据,不能像别的blogger那样总结上一年blog的情况,而作罢。
昨天帮网上一位朋友转换blogbus的备份,忙了一天,可以算是2006年冰古blog的一个写照。

刚才看到wordpress planet中alex的一篇post,提到一些SQL语句是关于2006年blog的一个粗略总结的。我也借此对冰古blog在2006年作个总结吧:
一年发的post篇数为 145
得到的留言数为 463
post的平均字(节)数为 1126.2345
总字(节)数为 163304
(utf8格式下的中文字一个占3个字节)

关于这些SQL语句,要注意的是:
如果你的wp-config.php中$table_prefix不是’wp_’,请修改语句中的’wp_’为你的$table_prefix;
语句中 的全角和半角。

如果你和我一样使用GaMerZ的WP-PostViews统计posts的查看数,那这条SQL语句就是为你准备的,2006年的posts中查看数最多的是:

SELECT meta_value, ID, post_title, post_name
FROM `wp_posts` , `wp_postmeta`
WHERE post_id = ID
AND meta_key = 'views'
AND post_date >= '2006-01-01'
AND post_date < '2007-01-01'
AND post_status = 'publish'
ORDER BY cast( `meta_value` AS DECIMAL ) DESC

冰古blog查看数最多的2006年的posts是:
1、wordpress2.0 rss import文件分析及oblog导入 (3498 views)
2、昨天阅读 (3364 views)
3、更新blogbus to wordpress转换程序 (1408 views)
4、我使用的plugins (1114 views)
5、从blogbus跳转到WordPress (916 views)

如何度过光缆中断的日子

下午上网,除了google的服务,其他常上的外国网站都不能打开,而国内的网站却跑得很顺畅,嘿,adsl成“高速教育网”了。
当时没跟台湾地震联系上。看到新闻才知道原来是地震时,海地电缆断了一片。
台湾发生7.2级地震
台湾南部海域连震5次 电缆修复最少一个月后
广东地震局:余震仍在继续 维修船只可靠近
日韩网站未受影响 欧美及阿拉伯网站无法访问

地震很强,幸好伤亡不多,正如家里人常说的那样:人没事就好。

地震我没感受到,但地震带来的影响却是颇大的。刚 从盘古搬到dreamhost,难道还要搬回去?虽说“工程”不大,但搬来搬去的也不是件容易的事。
解决的办法很简单,使用“日韩”代理+Google吧。
代理
我常用firefox,国产的xyzproxy是个不错的快速设置代理的扩展
不用注册也没有一大堆广告的代理站很不错
Google
zhuaxia告诉我们说:紧急通知:Feedburner种子及MSN SPACE的抓取更新可能将出现问题
把feedburner的种子放到google reader去不就行咯。

到这里为止,ADSL终于有宽带的感觉了。

UPDATE
关于修复时间 from:IT爆料馆

  目前没有收到任何关于维修进程的报道和消息,我们只能查看一些历史数据:2001年2月9日,跨太平洋的中美海底光缆在上海崇明岛段受损中断,2月 22日维修完成。3月9日,刚刚修复的中美海底电缆在另一处发生断裂,3月22日维修完成。两次维修花费的时间完全一样,都是十三天。按照这个推测,我们就期待2007年1月9日吧。

抵御留言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,已经大大改善。

links for 2006-12-22

怎样将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上了。

想买空间,续集

在不久前的一篇“想买空间”中提到自己想买空间。

Dreamhost当然是首选,理由?便宜的首年!
第二选择是Hostmonster,因为它跟bluehost的关系(注册系统相同、网上的传言和两站之间的相识性)和不用优惠码也很便宜的价格(两年价$4.95/mon)。

由于使用信用卡购买Dreamhost需要传真一份表格给他们(似乎现在是必须的),而当时使用了优惠码后信用卡是唯一的支付方法,所以放弃了。Hostmonster虽然是比较便宜,但还是想等到圣诞,等他们的“圣诞大餐”。

但漫长的等待是让人着急的,在离圣诞还有不到一周的时候,再次尝试购买Dreamhost,竟然成功了!
DH的支付系统似乎又更新了,在使用了优惠码后,支付方式有了多钟选择:check、PayPal、google checkout和Mail-In
dreamhost payment

但有利也有弊,使用优惠码再用PayPal支付将不能享受DH的97天无条件退款服务,所以不能确认自己能满意DH服务的情况下,还是用信用卡支付吧。

我也来个DreamHost节省$97的优惠码:BINGU