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

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

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

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 行):



修改为:



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

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

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