您的位置: 首页 / PHP / WordPress 的 XSS 漏洞和暂时解决方案

WordPress 的 XSS 漏洞和暂时解决方案

Published at Mar 22, 7pm / Keywords: , ,

Mgccl 同志给我们 CBN 的每位成员邮箱中发了封邮件,内容都差不多,留下了一个链接,向博客的主人展示了一下 WordPress 的 XSS 漏洞以及简易攻击效果。这封邮件没什么恶意,只是善意的提醒,在这里感谢一下 Mgccl。由于我和 Mgccl 之前认识,所以除了我的邮件,似乎其它人的邮件中它都留下了自己网站的链接,不错的推广方法啊。好了,这里我也推荐一下,如果您的英文水平不错的话,可以去看看 Mgccl 的技术型小站 WebDevLogs,会有收获的。

言归正传,让我们看一下这个漏洞。关于 XSS 漏洞最近还是比较火爆的,因为最初爆出这个漏洞问题的是大名鼎鼎的 Google。利用这个漏洞,黑客可以窃取网站访客的 Cookies 信息。有了 Cookies,很多事情都可以做了吧 :P 对于 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 行):

  1. <?php
  2. if ( !empty($year)) {
  3. $title=$year;
  4. ?>

修改为:

  1. <?php
  2. if (!empty($year) && is_numeric($year)) {
  3. $year = intval($year)// hack to avoid XSS injection
  4. $title = $year;
  5. ?>

这样基本上就把 $year 过滤干净了,想利用它来进行 XSS 攻击基本不可能了。以上修改是基于 WordPress 2.1.2 的,其它版本的 WP 应该也类似。

对参数没有进行充分过滤是平时写程序经常出现的问题,虽然尽力避免但也难以保证不出现。刚看了一下 SVN 中的 WordPress 新版本,它使用更严谨的过滤方法,而且极大的减少了全局变量的使用。少用全局变量对于提高程序的安全性效果是非常明显的,我们平时写程序时也应该注意一下。

收藏和分享本文 17fav 收藏本文

发表您的观点或推荐本文 Loading...

20 Responses

  1. Mar 22, 9pm / LINK / REPLY
    Gravatar

    没有

  2. Mar 23, 3am / LINK / REPLY
    Gravatar

    Glad I could help
    :smile:
    I think cast into integer is good enough to prevent XSS, simple + fast xD

  3. Mar 23, 3am / LINK / REPLY
    Gravatar

    又是漏洞。。。补之!

  4. Mar 23, 9am / LINK / REPLY
    Gravatar

    …偶的wp下面怎么没有wp-includes/general-template.php 这个文件呢-_-

  5. Mar 24, 2am / LINK / REPLY
    Gravatar

    我想请教一下怎么才能实现wordpress的全部静态化,我安装了wp-cache这个插件,不过没有安装成功。还有其他的办法么?

  6. Mar 24, 11am / LINK / REPLY
    Gravatar

    @ Angelived: 我觉得 WP-Cache 的效果已经很好了,跟静态化差不多了。想想办法装好 WP-Cache 吧,多用 Google 搜一下。

  7. Mar 24, 11am / LINK / REPLY
    Gravatar

    我知道这个插件,原来在LINUX的主机下我可以设置文件属性为777,现在换到了WIN的主机下,属性不能修改了。虽然网上说WIN下不存在777属性的问题,不过我安装了几次WP-CACHE插件都装不成功。我想看下有其他的方法没~

  8. Mar 24, 1pm / LINK / REPLY
    Gravatar

    @ Angelived: WP-Cache 是可以工作在 win 主机上的,需要做一些修改,网上有相关文章。

  9. Mar 24, 10pm / LINK / REPLY
    Gravatar

    XSS,就象上次工行网站被发现的那个漏洞一样,对网站本身带不来什么危害吧?

    想通过XSS漏洞窃取WordPress管理员的cookies,还满有难度的,比较玩WordPress的都是高手来着,嘿嘿。

    不过假如真的窃取到了,那么进WordPress后台就很容易了。

  10. Mar 25, 12am / LINK / REPLY
    Gravatar

    奇怪了,你的订阅量一下子从2809一下子掉到现在的2445了,是feedburner的问题?不会一下子有那么多人退订你的博客吧!~~

  11. Mar 25, 9am / LINK / REPLY
    Gravatar

    @ yskin: 恩,不是很严重的问题,但确实还是有可利用的方法。
    @ Angelived: Google FeedFetcher 返回的数据有问题,经常差个几百。不过 FeedBurner 的统计数据现在也和 Alexa 排名一样意义不大了。

  12. qqq
    Jun 11, 4pm / LINK / REPLY
    Gravatar

    alert(”qq”);

Now, It's your Turn!

BACK TO Article / Comments