WordPress 的 XSS 漏洞和暂时解决方案
Mgccl 同志给我们 CBN 的每位成员邮箱中发了封邮件,内容都差不多,留下了一个链接,向博客的主人展示了一下 WordPress 的 XSS 漏洞以及简易攻击效果。这封邮件没什么恶意,只是善意的提醒,在这里感谢一下 Mgccl。由于我和 Mgccl 之前认识,所以除了我的邮件,似乎其它人的邮件中它都留下了自己网站的链接,不错的推广方法啊。好了,这里我也推荐一下,如果您的英文水平不错的话,可以去看看 Mgccl 的技术型小站 WebDevLogs,会有收获的。
言归正传,让我们看一下这个漏洞。关于 XSS 漏洞最近还是比较火爆的,因为最初爆出这个漏洞问题的是大名鼎鼎的 Google。利用这个漏洞,黑客可以窃取网站访客的 Cookies 信息。有了 Cookies,很多事情都可以做了吧
对于 WordPress 来说,在 SecurityFocus 对于这个漏洞有比较详细的描述。问题主要出现在 WordPress 中 wp_title 这个函数没有对 URL 中的 year 进行良好的过滤。从描述中我们可以看到,除了最新的 SVN 版本外,所有的 WordPress 版本都在受这个漏洞的困扰。虽然这个漏洞被标记为 Less Critical,不过利用这个漏洞攻击还是非常简单的,所以我个人建议还是应该对这个漏洞进行一下修补。
说说解决方法。目前还没有很好的官方解决方法,SecurityFocus 给出的建议是升级到最新的 SVN 版本,因为新版的 WordPress SVN 已经修补了这个漏洞。但是我详细大多数人不是很喜欢用 SVN 版本,甚至很多人也不会用 SVN 去 co 新版本。下面我给出一个比较简单,但不完美的暂时解决方案,临时修补一下这个漏洞。等下一个 WP 版本官方便会修补这个漏洞。
其实根据漏洞出现的原理,我们对 WordPress 中 wp-includes/general-template.php 文件 wp_title 函数的 $year 加强过滤即可解决这个注入漏洞。首先找到 function wp_title,然后找到其中的这行(大概在 196 行):
- <?php
- if ( !empty($year)) {
- $title=$year;
- ?>
修改为:
- <?php
- if (!empty($year) && is_numeric($year)) {
- $year = intval($year); // hack to avoid XSS injection
- $title = $year;
- ?>
这样基本上就把 $year 过滤干净了,想利用它来进行 XSS 攻击基本不可能了。以上修改是基于 WordPress 2.1.2 的,其它版本的 WP 应该也类似。
对参数没有进行充分过滤是平时写程序经常出现的问题,虽然尽力避免但也难以保证不出现。刚看了一下 SVN 中的 WordPress 新版本,它使用更严谨的过滤方法,而且极大的减少了全局变量的使用。少用全局变量对于提高程序的安全性效果是非常明显的,我们平时写程序时也应该注意一下。
原文链接**:花儿开了 - WordPress 的 XSS 漏洞和暂时解决方案
** 本博客文章欢迎转载,但请务必保留原文链接!同时,本博文章不欢迎任何形式的派生及篡改,如需引用,请使用引用通告(Trackback) - http://blog.istef.info/2007/03/22/xss-bug-of-w.../trackback/。商业网站使用请务必先取得作者授权!

没有
Glad I could help

I think cast into integer is good enough to prevent XSS, simple + fast xD
又是漏洞。。。补之!
…偶的wp下面怎么没有wp-includes/general-template.php 这个文件呢-_-
我想请教一下怎么才能实现wordpress的全部静态化,我安装了wp-cache这个插件,不过没有安装成功。还有其他的办法么?
@ Angelived: 我觉得 WP-Cache 的效果已经很好了,跟静态化差不多了。想想办法装好 WP-Cache 吧,多用 Google 搜一下。
我知道这个插件,原来在LINUX的主机下我可以设置文件属性为777,现在换到了WIN的主机下,属性不能修改了。虽然网上说WIN下不存在777属性的问题,不过我安装了几次WP-CACHE插件都装不成功。我想看下有其他的方法没~
@ Angelived: WP-Cache 是可以工作在 win 主机上的,需要做一些修改,网上有相关文章。
XSS,就象上次工行网站被发现的那个漏洞一样,对网站本身带不来什么危害吧?
想通过XSS漏洞窃取WordPress管理员的cookies,还满有难度的,比较玩WordPress的都是高手来着,嘿嘿。
不过假如真的窃取到了,那么进WordPress后台就很容易了。
奇怪了,你的订阅量一下子从2809一下子掉到现在的2445了,是feedburner的问题?不会一下子有那么多人退订你的博客吧!~~
@ yskin: 恩,不是很严重的问题,但确实还是有可利用的方法。
@ Angelived: Google FeedFetcher 返回的数据有问题,经常差个几百。不过 FeedBurner 的统计数据现在也和 Alexa 排名一样意义不大了。
alert(”qq”);