2007年01月 的存档

rm文件的弹出窗口广告

一直没太注意rm文件的弹出窗口广告问题,平常下载的大多是冰鱼和伊甸园的我猜还有韩娱论坛的X-Man,都比较正规一点,不会带弹出窗口广告。偶尔下到一些有广告的电影,窗口一弹出来我就会立刻关上,所以少有中招。

最近偶然发现在使用暴风影音播放rm文件时也会弹出窗口,所以抽了点时间研究了下这个问题。原以为rm文件是通过在文件tag里设置一个属性,如果播放的rm文件的该属性值被设置成一个URL地址就在浏览器里打开这个URL。研究后我才发现,比我想象的要复杂点,rm文件可以内嵌一些很简单的小脚本,RealPlayer播放器读取rm文件时会执行这些脚本,从而在播放到某个时间时打开一个URL。

RealProducer Plus和Helix Producer Plus都自带一个rmevents.exe程序,可以修改rm文件的event部分。rm文件的event部分是纯文本的,只要按照固定的格式写好,RealPlayer播放器在播放的时候就会照着执行了。具体的event格式在Real网站的Helix Producer教程里有详细说明,只要用u 00:01:00.0 00:01:00.0 http://www.example.com/这样的代码就可以让这个rm文件在播放到1分钟时自动打开后面的URL。按照event的格式一条一行地写入一个文本文件内,然后用rmevents -i film.rm -e test.txt -o film2.rm命令即可把这些event信息加入rm文件,一个内嵌弹出窗口广告的rm文件就此诞生。如果浏览者的IE浏览器安全性不高,而rm文件内嵌的URL里又有病毒的话,很容易就可以让浏览者中招。

而清除弹出窗口广告的方法,和加入的方法一样,只有建一个空的event文件,然后写入rm文件就可以了。目前网络上好像有很多这样的程序,全部都是软件自带了rmevents.exe程序和它需要的/tools/rmto3260.dll文件,然后做一个GUI界面,让用户选择文件后调用rmevents程序将空的event文件合并到rm文件中。最近常看到一些电影在播放时显示出来的信息带有"RM去广告专家"字样,估计是一些人在下载了电影后用了这样的软件去处理过。下了个RM去广告专家 v2.10批量处理版,在安装目录里找到blank.txt文件,文件里放着如下代码。这样处理后的rm文件弹出窗口广告是没了,可是多了去广告软件的信息,够无耻。i命令是设置标题,a是作者名,c是copyright。a和c命令没有在Real网站的教程里提及,只有u和i被提及过,这个软件作者也算够强的。

i 00:00:00.0 00:00:10.0 RM去广告专家
a 00:00:00.0 00:00:10.0 www.591dir.com
c 00:00:00.0 00:00:10.0 用《RM去广告专家》清除RM恶意弹出广告

另外还有从RealPlayer播放软件入手的方法,只要删除RealPlayer目录下的/rpplugins/rpwe3260.dll文件,就可以把整个RealPlayer软件的浏览器部分禁用了,这样也不会再弹出窗口了。另外,在这里看到,有人写了一个小软件rpnopop,只要执行软件,点击“屏蔽弹窗”按钮,软件就会修改注册表,使得RealPlayer不再执行event脚本。不过作者说了,这个方法只在安装了RealPlayer软件的环境下有效,只安装了Real解码器的环境下依然无效。唉,Real公司咋就不紧张这个问题捏?

rmevents.exe程序有一个"-d"选项,可以把rm文件中的event给dump出来。这个命令可以用来分析rm文件的event代码,做成程序放到rm文件的右键菜单里最好了。

Update:昨天刚写了这篇文章,今天就中招了。已经用了rpnopop修改了注册表,但是对网页中的rm文件播放弹出的窗口无效。无奈啊,还是Firefox安全些。

Update2:关于暴风影音里rm弹出广告的问题,我昨晚又做了下测试。其实也不只针对暴风影音,因为所有的MPC播放器应该都是一样的。

在暴风影音里,如果设置rm文件的播放方式为DirectShow,则不会弹出窗口;如果设置为RealMedia,则依然会弹出窗口。而且,和RealPlayer稍有不同的是,如果脚本代码设置的是在RealPlayer自带的浏览器里打开URL,那么在RealPlayer播放会在自带的浏览器里打开,但是MyMPC里会调用IE浏览器打开。记忆中,这些年,大多数rm文件都可以正常在DirectShow方式下播放,只是偶尔有一些rm文件必须切换到RealMedia方式才能正常播放。(关于DirectShow和RealMedia两种方式,可以参考风雷影音中的RealMedia专题。)所以平常还是把暴风影音切换到DirectShow方式,如果遇到一些不规范的rm文件再使用rpnopop软件配合RealPlayer播放器或者使用rmevents程序吧。
暴风影音rm播放模式设置

另外我发现,网页中播放的rm文件好像也不受限制,所以还是不要在网页里看视频的好。Real公司还真麻烦...

Yskin's Table of Contents Generator——TOC自动生成器

2006年7月13日,想弄一个类似Wikipedia上文章目录的功能,希望能参考Wikipedia的格式,只要用"==title=="这样就可以自动生成标题,并在文章的开头根据这些标题自动生成目录。写了一点代码,但是没有完成,能力有限啊。2007年1月10日,也就是半个月前,在鼓捣我的Projects页面的时候,偶然发现了Table of Contents GeneratorTable of Contents Generator插件,可以为文章自动生成一个目录,方便浏览者查阅。这个功能不错,有点类似Word的目录域功能,只要在合适的地方添加一个目录域,这个地方就会显示当前文档的目录,而且当你修改文档的时候目录也会自动更新。

看了一下这个插件的源代码,不是很满意,于是就重新写了一个,用于我的Projects页面。Scott Yang用的堆栈,我觉得不太好,就用了一个数组模拟堆栈,写出来的代码也短一些。Scott还考虑了对分页文章的处理,我没写过分页文章,而且现在很多喜欢分页文章的人都用了Coolcode.cn的AJAX分页插件,两个插件兼容性上也会有一些问题,所以分页功能我就不予考虑了。再在大的函数开头建几个类变量的引用,这样整个程序小了很多。

给目录上方上面加了一个标题“Table of Contents”,这样就和Wikipedia里的目录很象了。Wikipedia里的文章目录标题旁边有一个链接,点击它可以隐藏或显示目录内容。我懒得弄那个链接了,直接通过JavaScript代码控制当点击标题时隐藏或显示下面的TOC框。参考了WordPress Codex里这个页面的JavaScript代码,弄好了点击隐藏TOC功能。JavaScript代码很简单,但有一个问题是:当隐藏TOC内容后,因为标题“Table of Contents”比目录部分窄很多,所以整个TOC块的会突然变窄,有点难看。Wikipedia里没对这个情况进行处理,点隐藏就突然变窄,点显示又突然变宽。而WordPress Codex里则使用固定宽度的TOC框,固定宽度在目录里有比较长的标题的情况下比较好。查了一些CSS方面的资料,使用JavaScript在隐藏的时候把TOC框的clientWidth值赋给toctitle.style.width。这样在Firefox下没有问题,IE里却还是不行。用JavaScript的alert()函数查看TOC框的clientWidth值,发现是0。在网上逛了很久,都说没有办法。最终,只有用offsetWidth这个属性。offsetWidth和clientWidth的区别是,前者包括border的宽度,而后者不包括。最终写出了比较完美的代码,在IE6 SP2、Firefox 1.5.0.6、Opera 9.10下均测试通过。

还有锚的问题。Scott的插件里用标题生成锚,WordPress Codex里用标题URL encode后去除百分号生成锚。这样做有一个好处就是,当增加标题的时候,锚地址不会变,因为锚地址只和标题文字有关,和顺序无关。缺点是,中文标题生成的锚地址会很长。我用的是序号的方法,这样做的好处是当修改标题时锚地址仍然不变,而且在中文环境下锚地址也会短些。总之,两种方式各有所长吧。

前几天忙于WordPress 2.0.7和WordPress 2.1,今天抽了点时间又看了下这个插件。插件在文章页面显示没有问题,但是在feed里出了问题。查了很久,将近3个小时,看代码看得我快崩溃了,最后才发现类的对象只建立一次,它是被重复使用的。把初始化变量移到函数里,问题就解决了,可以release了。

请移步到“Yskin's Table of Contents Generator”主页下载软件并查看更多信息。

WordPress 2.1里feed不显示more标签后面文字的问题

天佑一直使用着WordPress 2.1版本,从老早以前的Alpha版本就一直跟着svn走了。他对WordPress 2.1版本了解的比较多一些,也写了一些文章讲了一些WordPress 2.1的问题。

WordPress 2.1有一个feed的问题,在天佑的这篇文章里有详细描述,并向WordPress开发组报了bug #2582。这个问题会影响同时使用全文feed和more标签的用户。当你在文章里使用的more标签时,Blog首页里这篇文章的显示将会在more标签这儿截断,并在后面显示"read more"字样,指向文章页面。从WordPress 2.0系列以前,WordPress对more标签的处理一直是只影响Blog首页,不影响archive页,也不影响feed里的全文输出。但是,WordPress 2.1里却改了,feed里一样会在more标签这儿截断。

我想没人会喜欢这个修改。既然选了feed全文输出,就希望feed里是完整的全文。more标签只是用于维护Blog首页的干净整洁,同时影响feed可不好。随着WordPress 2.1的正式发布,我想会有很多人关注到这个问题。冤有头,债有主,虽然是2006年3月的事了,我还是要查一下这个bug到底是怎么来的。

按照天佑报的bug里的说法,他是在3645版本里发现有这个bug的。我往前找了一下,找到Changeset 3638。很明显,这个bug出现的原因是因为WordPress把wp-rss2.php等文件的载入方式改了。以前是用require()函数载入的,在3638里被改为通过load_template()函数载入。以前WordPress的wp-rdf.php, wp-rss.php, wp-rss2.php, wp-atom.php文件的开头都有一句$more = 1;,这句代码保证了feed的输出的始终是全文。在[3638]里,载入方式被改变,这些feed文件在一个函数里被载入,导致这里的$more变量由全局变量变成了一个局部变量,于是,bug就产生了。

显然这个修改不是WordPress开发组故意为之,而是无心之过。但是,在天佑报了bug以后,Mark说," This is intended behavior."Mark认为这是故意为之,并且认为这种方式更好一些。这个Ticket还吸引了ryan和matt,他们也认为这样更好,并且认为WP 1.5里就是用这种方式处理的,并且还在[4184]里做了一些优化。但是资深WPer天佑立刻指出,WP 1.5和2.0一样,这个改变发生在WP 2.1 Alpha里。

最终,这个事就被这么确定下来了。WordPress开发组完全无视我们强烈的要求,在WordPress 2.1里对feed的输出方式做出这么重大的改变。随着WordPress 2.1的正式发布,会有越来越多的人发现这个问题,就在昨天还有人在天佑的那个ticket里表示了异议。这种输出方式的重大改变,如果确实这种功能的话,也该给一个选项啊,这样强行的改变,不顾广大用户的感受,只凭自己的喜好,出了问题后还狡辩说是故意为之,一个字:可耻!

可笑的是,4个feed文件中的$more = 1;代码依然被保留了下来,还在WordPress 2.1的源代码里静静的躺着。好好的躺着吧,最好一直躺到WordPress 2.2里。

解决的方法嘛,除了按照天佑所说,修改/wp-includes/query.php文件之外,还可以直接修改那4个feed文件,把$more = 1;修改为global $more; $more = 1;,或者$GLOBALS['more'] = 1;

最后,作为一个懒人,未免以后升级WordPress时需要修改4个feed文件这么劳累,做了个小插件,在WordPress源代码里随便找了个地方插进去,对$more变量做了处理。阿土伯说,傻人有傻福。

请移步到“WordPress 2.1 feed Tuneup”主页下载软件并查看更多信息。

点点游WordPress 2.1中文版

点点游WordPress 2.1中文版点点游大大制作的中文化的WordPress版本。点点游大大一直致力于WordPress本身和WordPress模版的汉化,从很久以前就开始为WordPress的每个发布版本制作中文版了。这个“中文版”不同于“中文包”,中文包只是数据文件,WordPress只是从中文包zh_CN.mo文件里读取翻译后的文字并显示出来,所以,WordPress没有提供给语言包翻译的字符串,以及一些因为在语言包被调用之前显示而无法提供给语言包翻译的字符串(比如一些错误信息),中文包都无能为力。而点点游制作的中文版对这些地方做了细致的汉化,甚至一些注释部分都汉化了。

但是,点点游大大没有给出中文版修改了WordPress原版哪些部分的说明,或许是因为太忙吧。因此,网上流传着很多流言,有的说中文版/中文包“严重影响速度”,有的说中文版下某些插件或模版无法正常工作,换回原版WP就好了。所以,继上次我写了点点游WordPress 2.0.5中文版修改记录,这次再写一下点点游WordPress 2.1中文版的修改记录。

  1. /wp-admin/admin-functions.php文件中,把用户名称的显示从“名 姓”修改为“姓名”。这样比较符合中国人的习惯,不过修改后的姓名中间没有加空格。
  2. /wp-admin/edit.php文件中,把文章管理页面中按月浏览的那个月份列表从“May 2006”修改为“2006年5月”
  3. /wp-admin/edit-comments.php和wp-admin/moderation.php文件中,把评论管理页面中的评论日期格式由"M j, g:i A"修改为“n月j日, g:i A”
  4. /wp-admin/index.php和/wp-admin/index-extra.php文件中,在后台Dashboard里添加来自"http://www.gtp2p.com/feed/"的新闻。呃,看看新闻也不错哈。Technorati的feed这次没有被移除,因为WP 2.1的异步feed读取已经避免了Dashboard打开慢的问题了。
  5. /wp-admin/setup-config.php文件做了全面的汉化。这是在上传WordPress文件后,建立wp-config.php文件的程序,对这个文件进行汉化,方便了初次安装WordPress的用户,让他们可以在中文界面下填写数据库用户名密码等信息。
  6. /wp-admin/upgrade-functions.php文件里给__('about')加了一个urlencode函数。
  7. /wp-admin/wp-admin.css以及TinyMCE的CSS文件中,把字体大小小于12px的全部调成12px,英文里10px的字都还能看,中文里12px已经是能忍耐的最小字号了,再小的化Windows的宋体字体文件里就没有相应的字号,显示出来就会很小又很模糊了。这对于中文用户很有帮助。不过我把我的Firefox中文最小字体设成了12px,要不然,别的不说,Google Calendar里的中文都看不清了。Firefox的这个功能真不错,哈哈。
  8. 汉化Akismet、Hello Dolly这两个插件的名称和说明部分。
  9. WordPress Database Backup插件已经在WordPress 2.1里被移出核心了,但是点点游大大为了方便中文用户,将这个插件集成进中文版,并进行了细致的汉化,还把所有的get_settings()换成了get_option(),以兼容WordPress 2.1。不过,集成的是1.7版。我记得WordPress核心里的这个插件老早就改为1.8版了。而且,好多人都说,这个插件的旧版本已经不能在WordPress 2.1里使用了。WordPress Database Backup插件已经换了开发者,并推出了修正了bug并兼容WordPress 2.1的WordPress Database Backup 2.0。所以,请使用WordPress 2.1的朋友们及时升级到新版本。
  10. 汉化了内置的WordPress Classic和WordPress Default两个主题。
  11. 汉化普通编辑器的快捷按钮,通过增加中文js文件汉化TinyMCE编辑器。在TinyMCE中增加分页按钮,修改了可视化编辑器中两个图片文件,把"More"替换成“更多”。
  12. /wp-includes/general-template.php文件好像有点不对,这好像是个旧版的文件,很多地方和WordPress 2.1正式版对不上号。比如,WordPress 2.1里编辑器中的两个标签名分别是"Visual"和"Code",这两个名称是2006年11月17日被修改为现在的样子的,以前叫"Editor"和"HTML"。[via]而点点游中文版里还是以前的名字,所以,中文版里的这个文件起码是去年11月17日之前的旧文件。
  13. /wp-includes/gettext.php文件中加入一句$string = str_replace("\r\n", "\n", $string); // Fix multi-line string problem.。因为点点游中文版把所有文件都由UNIX格式改成了DOS格式,所以要加上这一句来修正bug?
  14. 将GNU许可证文件license.txt替换成中文版。
  15. 汉化readme.html使用说明文件。
  16. 将wp-config-sample.php文件中的说明部分全部汉化,并将define ('WPLANG', '');修改为define ('WPLANG', 'zh_CN');
  17. 在/wp-includes/languages/目录下增加wordpress.pot,zh_CN.po,zh_CN.mo三个文件,其中zh_CN.mo为中文包。
  18. /wp-admin/install.php、/wp-includes/wp-db.php、wp-blog-header.php、wp-settings.php文件中错误信息的汉化。

所有修改的内容都在这里。下次再遇到一些插件的问题,模版的问题,以及WordPress本身的问题,就不要再往点点游的中文版上怀疑了。

另外,希望使用点点游WordPress 2.1中文版的用户去升级一下WordPress Database BackupWordPress Database Backup插件。还有,最好找来WordPress 2.1原版里的/wp-includes/general-template.php文件上传覆盖一下,差别还是满大的,免得有bug什么的。

WordPress 2.1的一个小cookie兼容问题

我还没有升级到WordPress 2.1,不过我在一个子目录下装了一个WordPress 2.1。这几天只用过几次,发现主Blog这边的WordPress 2.0.7的编辑页面里,右边的那些小框框都不能拖动了,标题栏右边用来展开框框的加减号也不见了。看了下Firefox的JavaScript控制台,发现报了一个错误,好像是cookie有问题。

小小的研究了一下。WordPress会自动记住这些框框的顺序,以及打开或关闭。这些自然不会记录在服务器上,而是用cookie记录的。找到控制这些框框的js文件:/wp-includes/js/dbx.js,发现里面在设置cookie的时候,path被设置为"/"。WordPress的其他cookie,比如记录用户登陆状态的cookie,都是有记录path的,所以多个目录下的不同WordPress互相之间不影响。而这个dbx.js只是个js文件,无法象PHP文件那样使用SITECOOKIEPATH常量获得当前WordPress在域名下的哪一个PATH,所以直接用"/"也是无奈。问题是,如果多个WordPress都是同一个版本的话,那么就等于是共用该设置,大不了一个WP里调整过顺序,其他的WP也跟着调整了而已。而WordPress 2.0.7和WordPress 2.1里,这段cookie保存的格式是不一样的。WordPress 2.0.7里是:

grabit=2+,3+,4+,5+,0-,1-,6-&advancedstuff=0-,1+,2-

而WordPress 2.1里则是

grabit:3+|0+|5+|4+|1-|2-&advancedstuff:0-|1+|2-

结果我的WordPress 2.0.7读取了cookie,在解析时发现格式不对后,就直接出错了。

没办法,改了一下WordPress 2.1里的dbx.js文件,把path改成目录名。然后把原来的cookie删了,两边都重新调整了一下,这下不冲突了。WordPress 2.0.7里带的是DBX 2.02,而WordPress 2.1里带的是DBX 2.05。找来DBX 2.05的源代码看了一下。从WordPress 2.0.7升级到WordPress 2.1应该没问题的,不会出现错误,因为DBX 2.05里写了this.cookie[i] = this.cookie[i].replace(/\|/g, ',');this.cookie[i]= this.cookie[i].replace(/:/g, '=');这样的代码,哈哈。

Update:这几天用的还行,只是偶尔(大概两天一次)会出现问题。想了半天,好像"/"的cookie可以同时影响"/"和"/nc/"是不是啊。火大,直接把WordPress 2.1的dbx.js上传替换了WordPress 2.0.7的文件,好像也没有不兼容。看了一下,把2.1和2.0.7的编辑文章页面侧边栏框框的顺序调成一样,两者的cookie里的顺序有一点不一样。所以,二者不能共用cookie。唉,还是尽快升级的好。

WordPress 2.1发布

WordPress 2.1
WordPress 2.1已于北京时间2007年1月23日早上5点58分正式发布了。唉,前几天听人说是要准备1月22号发布,果然就在22号发布出来了。这个从WordPress 2.0刚发布不久就开始筹划准备的WordPress 2.1,今天终于算是圆满了。WordPress 2.1的代号是Ella,汗,说到Ella就让我想起S.H.E.了。

继续阅读《WordPress 2.1发布》

Windows自带的WordPress图标

在Windows XP里,找一个位于NTFS格式磁盘里的文件夹,在上面点右键->属性->自定义->更改图标,输入"%SystemRoot%\system32\moricons.dll",回车。把滚动条往右拖一拖,找到WordPress的那个图标,单击选中,一路点确定退出来。好了,现在这个文件夹就有了WordPress的图标了。
WordPress icon in Windows

这个moricons.dll文件是Windows XP自带的,看文件名,应该是"more icons"的意思吧。好吧,我承认,这个wp应该是Wordpad写字板的意思。这个dll文件里放的都是一些早期的图标,比如右下角的那只小狐狸,可不是Firefox哦,应该是微软收购Foxbase/FoxPro后用的图标吧。

WordPress 2.0.7发布

呼,14号才RC2的WordPress 2.0.7,今天早上5点41分就release了。上次WordPress 2.0.6是2007年1月5日发布的,这才十天时间,2.0.7就出来了。

正如WordPress官方Blog所说,这次这么着急的发布是因为有两个重要的bug需要修复:一个是FeedBurner读取feed的问题,一个是旧版PHP的bug。这次从WordPress 2.0.6升级到2.0.7只修改了下面七个文件,所以只要上传覆盖这七个文件就可以完成升级了。

  • wp-admin\inline-uploading.php
  • wp-admin\post.php
  • wp-content\plugins\akismet\akismet.php
  • wp-includes\classes.php
  • wp-includes\functions.php
  • wp-includes\version.php
  • wp-settings.php

这次的更新有如下几项:

  1. 现在删除page后,页面将会自动跳转到“管理->页面”页。[4692]
    另外,WordPress官方Blog上所说的“删除page的时候不再提示"Are You Sure?"”,乱讲!
  2. 修正在IE浏览器里向页面发送原始尺寸的图片时,"height"属性不正确的问题。[4706]
    这个bug只出现在IE浏览器里,而不影响Firefox浏览器。因为,Firefox在返回一个对象的innerHTML属性时,已经将这段html整理过,给每个标签的每个属性加上双引号。汗,Firefox真是强悍。[via]
  3. 修正某些情况下不能正确返回HTTP 304的bug。[4715]
    这个bug出现在某些PHP版本中,当magic_quotes_gpc打开时,$_SERVER数组里的某些项会被两次addslashes()。我的服务器正好有这个问题,前几天trac.wordpress.org上在讨论FeedBurner的那个bug的时候我就发现,我的feed根本不返回304 Not Modified。其他的一些资源文件,比如CSS文件,返回304是由Apache控制的,这些304都能正确返回。而Blog页面和feed等,都是由WordPress控制是否返回304的,显然问题出现在WordPress上。今天在2.0.6里做了个小hack试了一下,确实是一个双引号"前面被加了三个反斜线。不过,我自己写的PHP程序却没有这种现象发生,$_SERVER只被addslashes()了一次,奇怪奇怪。这个修正再加上下面的第五个修正,我的feed现在可以正确返回HTTP 304了。记得以前听人说,好像是车东说的,FeedBurner抓取feed时,都是先发一个HEAD命令过来,看看feed是否更新,然后再决定是否抓取,感情这么多年来,我的feed从未返回过304呀,可真是辛苦了FeedBurner了。
    另外,这个bug:#2597在2006年4月初就在WordPress 2.1里修复了,现在Mark终于想起我们2.0.x系列的用户了,555~~
  4. 针对PHP 4.4.3之前以及5.1.4之前的版本的zend_hash_del_key_or_index bug进行了修改,防止,运行在这些版本PHP之上,并且Apache的register_globals被打开的WordPress被攻击。
    这是个大bug,攻击者可以进行SQL注入,通过查询数据库获取管理员密码,然后直接登陆WordPress后台。[4717]
    详细的情况在我的这篇文章里有说明,还是推荐大家尽快更新WordPress到2.0.7。
  5. 修正所谓“FeedBurner问题”。[4684], [4724]
    在WordPress 2.0.6里,为了兼容新推出的PHP 5.2而做了一些修改,在PHP运行在非cgi方式下时,只设置了Status头,而不设置HTTP Header里第一行的"HTTP/1.1 200"。这样,当FeedBurner的服务器读取feed时,发现开头写着"HTTP/1.1 200 OK",然后后面却写着"Status: 304 Not Modified"时,FeedBurner就蒙了。然后,FeedBurner烧录过的feed就变成了一个空白页面。我想,FeedBurner是采信了前面的HTTP 200,认为这是一个正常的返回,而WordPress认为已经标记这个返回为304,所以返回的内容是空的,于是,FeedBurner就把这个空字符串写入数据库,我们就有了一个空feed。当然,这也不怪FeedBurner,据trac.wordpress.org上大家所说,Firefox 2.0也是这样处理的,除非你用Ctrl+F5刷新,这时Firefox不会发送If-Modified-Since和If-None-Match两个HTTP头,这样WP就不会返回304了。#3435
    另外,有人推荐使用header()函数的http_response_code参数,来强制PHP更新HTTP相应代码。[via #3528]这个参数是在PHP 4.3.0版被加上的,所以有了[4724]这个更新。我测试了一下,在我的服务器上加不加都无所谓。不过加上也没什么不好,以防万一嘛。
  6. Akismet从1.2.1升级到1.8.1,汗。

OK,快升级吧。

WordPress <= 2.0.6 wp-trackback.php SQL injection

WordPress <= 2.0.6 wp-trackback.php sql injection admin hash disclosure exploitWordPress <= 2.0.6 wp-trackback.php sql injection admin hash disclosure exploit, 2007年1月8日暴出的这个WordPress的SQL注入漏洞,攻击者可以通过Trackback来攻击WordPress,执行SQL语句。示例攻击程序可以读取数据库中ID为1用户的密码和用户名。因为WordPress是将用户的密码用MD5加密后存入数据库的,所以读取出来的是MD5过的用户密码。拿到密码后,可以通过伪造Cookies以ID为1的用户身份登陆WordPress。一般ID为1的用户就是系统管理员,而且WordPress安装时将其设为"admin",并且不允许修改,所以攻击成功后就可以拿到管理员身份。

这个程序要求服务器的PHP版本在4.4.3或者5.1.4以下,而且要求register_globals为on。我看了一下我的服务器,PHP版本是4.4.2。而我的Blog已经升到WordPress 2.0.6了,就拿自己的Blog做了一下测试。在服务器上放上程序,打开后,看着那串MD5字符串慢慢地,一个一个地跳出来,而且和数据库里的一字不差,那个寒呀。

又拿blog.edward.in做了下测试。(继上次测试之后,edward的Blog这次又被我拿来测试,为什么当我需要测试时,我总是第一个想起你呢,我亲爱的edward?)下面是程序的输出:

---------------------------------------------------------------------------
Wordpress <= 2.0.6 wp-trackback.php Zend_Hash_Del_Key_Or_Index /
/ sql injection admin hash disclosure exploit
(needs register_globals=on, 4 <= PHP < 4.4.3,< 5.1.4)
by rgod
dork: "is proudly powered by WordPress"
mail: retrog at alice dot it
site: http://retrogod.altervista.org
---------------------------------------------------------------------------

pwd hash   -> 6830a34a0e19cf16be362f030d96****
admin user -> ad

MD5字符串的最后4位已经屏蔽。用户名嘛,因为用户名显示的很慢,差不多要三四分钟才能出一位字符,不过看头两个字符,肯定是"admin"啦。

拿到"pwd hash",也就是MD5过的用户密码,接着关掉Firefox,修改了一下Cookies,把MD5过的用户密码再MD5一遍写进去。然后打开Firefox,登陆edward的Blog,右上角已经显示出"Site Admin"字样,点一下就可以进入后台了。
blog.edward.in的WP后台

想查看一下服务器的信息,就在插件里找了一下,找到安装了但是没启用的Akismet插件。到插件编辑器里修改这个文件,把PHP探针的代码拷进去,点更新文件后,发现插件直接没了。汗,估计是被杀毒软件给K掉了。于是,老老实实地修改了模版文件,加入一句<?php phpinfo() ?>。显示结果是这个服务器运行的是PHP 4.4.1,而register_globals也开着。

查了一下WordPress的源代码,这个漏洞是攻击wp-trackback.php文件,漏洞的产生是因为PHP的Zend_Hash_Del_Key_Or_Index函数有问题。[via]另外查了一下最新的WordPress 2.1 beta 2,这个版本怕是也有这个bug。WordPress官方已经做出更新:Changeset 4717,估计WordPress 2.0.7很快就能发布了,到时这个漏洞就可以被补上了。

被nonozone点名

被nonozone点名了,这是我第一次参加这种游戏。下面回答他提出的5个问题。

  1. 如果你的MM不说话,你要怎么哄她?
    道歉,不说话总是有原因的嘛,道歉并改正错误,让她满意不就行了嘛。
  2. 你早上起床的时候是先穿上衣还是裤子?我说的是内衣,嘿嘿。
    深圳一年有¾的时间是穿短袖的,不用穿内衣。现在1月份还算有点冷,气温都降到10度以下了。早上起床嘛,就拿今天来说,上面的贴身羊毛衫昨晚没脱(因为我的被子薄),起床后先穿内裤,然后是裤子,然后是外套。
  3. 如果有一天地球上只剩下你,你要怎么找乐子?
    如果地球上只剩下我,而根据常识,人类是不能无性繁殖的,所以,我要哀悼人类的毁灭,然后游览地球上的名山大川,最后要写下人类毁灭的原因,然后用Google翻译翻成多种语言,以告知后人(或者后面的什么动物)。
  4. 你觉得生活美好吗?
    美好,只要互联网还在互联着,只要我能方便地接入互联网。2006年12月26日晚上8点半的台湾地震让我们,尤其是依靠MSN进行联络办公的人,如此的不知所措。还好我找了个澳大利亚代理用着,访问WordPress网站速度很不错。还有我这里一直上不了flickr,今天想了个好办法,改了cookie,终于上去了,bingo。
  5. 你觉得nono是一个非常有魅力的人吗?
    不知道,不熟。不过凭以往的一点接触,还有他的Blog页面最下方的那串PHP错误信息来看,技术菜鸟是无疑地,嘻嘻。

呃,问题回答完了,还要想5个新问题传给另外5个人。物以类聚,人以群分,我和nono都在小明的WordPress群这个小圈子里,我认识的几个都被nono点完了,让我上哪去另找5个人啊。而且,记得以前听人说,好像是听嘿熊说的,cc协议和GPL协议最让人讨厌的,就是它要求使用者也要继承这个协议。比如一个程序里使用了一个GPL协议发布的函数,它也只能以GPL协议发布。这个游戏和GPL一样,也要求接的人再点5个人的名,可是我实在点不出来啊,唉,放弃。

P.S. 今天看《猫和老鼠》(TOM and JERRY),看到了一个眼熟的词,AJAX。赶紧打开KMPlayer,截下一个全屏截图。
AJAX in TOM and JERRY