WordPress XSS 漏洞修复(屏蔽)通用傻瓜方法

文章目录[隐藏]

缘起

此为 WordPress 搜索跨站脚本攻击(XSS)漏洞修复方法(感谢 360,让我发现此漏洞)的后续。

前些日子,收到 360 的提醒,说我的网站竟然高危,仅仅获得 2 分,速度打开,一看,满屏幕的跨站脚本攻击漏洞(WEB2.0),细细查看,愣了我半天。主要是说我的网站的 s 参数(搜索参数)和 replytocom 参数(回复参数)存在漏洞。可是,我不知道 360 得出的这个结果从何而来,我反复访问所谓的漏洞页面和正常页面进行检测,发现(也许是我眼花)毫无漏洞。而且那个搜索参数漏洞我之前才修复,并且进过检测确认没有已漏洞了,真不知道那个漏洞从何而来。

360 提示的漏洞截图:

 

wordpress replytocom xss 300x193

wordpress s xss 300x194

为了防止有人看不清楚,我把文字也发上来:

漏洞上线时间:2011-07-02

漏洞名称:跨站脚本攻击漏洞(WEB2.0)

漏洞类型:跨站脚本攻击(XSS)

所属服务器类型:通用

漏洞风险:

  1. 存在 “非法读取用户信息” 风险
  2. 安全性降低40%
  3. 7个站长进行了讨论

检测时间:2014-02-20 18:29:13

漏洞证据:<script>

漏洞地址:https://www.nikbobo.net/about/

解决方案:

方案一:站在安全的角度看,必须过滤用户输入的危险数据,默认用户所有的输入数据都是不安全的,请根据自身网站程序做代码修改。

方案二:使用开源的漏洞修复插件。( 需要站长懂得编程并且能够修改服务器代码 )

漏洞上线时间:2011-07-02

漏洞名称:跨站脚本攻击漏洞(WEB2.0)

漏洞类型:跨站脚本攻击(XSS)

所属服务器类型:通用

漏洞风险

存在 “非法读取用户信息” 风险

安全性降低40%

7个站长进行了讨论

检测时间:2014-02-20 18:37:28

漏洞证据:<script>

漏洞地址:https://www.nikbobo.net/

解决方案:

方案一:站在安全的角度看,必须过滤用户输入的危险数据,默认用户所有的输入数据都是不安全的,请根据自身网站程序做代码修改。

方案二:使用开源的漏洞修复插件。( 需要站长懂得编程并且能够修改服务器代码 )

纳闷

令人感到纳闷的是,我尝试过一些操作,比如对 replytocom 参数(回复参数)进行 intval() 过滤等等,可是依旧报漏洞,这次我真不知道 360 这个漏洞从何而来到底该如何修复。

被逼无奈之下,只好采取了一个下下之策,这回终于不报漏洞了。

分析

仔细观察 360 的漏洞地址,推断 360 的漏洞测试方法,发现主要集中在 alert()confirm() 这两个 JavaScript 函数上,那么,能不能针对这几个函数进行过滤,如果一有发现,直接拦截掉,这样就起到了修复(屏蔽)的作用了。

但是,要警惕的是,这个方法也许是掩耳盗铃之举,毕竟 360 测试都是用比较温和的函数,不会导致太多的风险,而真正的恶意攻击者可不会那么仁慈,他们所使用的,肯定是极为恶劣的函数和极为危险的动作。

解决

终上所述,再了解到恶意 URL 通常包含 eval() base64 等等危险字符和函数,一份 XSS 漏洞修复(屏蔽)通用傻瓜方法就出来了,在你的主题的 Functions.php 添加以下内容:

<?php
if (strpos($_SERVER['REQUEST_URI'], "eval(") ||
    strpos($_SERVER['REQUEST_URI'], "base64") ||
    strpos($_SERVER['REQUEST_URI'], "alert(") ||
    strpos($_SERVER['REQUEST_URI'], "confirm(")
) {
    wp_die('您输入的内容包含危险字符,安全起见,已被本站拦截', '恶意请求防火墙', array('response' => '403'));
}
?>

提示的文字可以自己修改,分别为提示内容、提示标题、返回 HTTP 状态码,我这里返回 403。

其实恶意 URL 还有一个特征,那就是长度 > 255,你也可以针对这个特征添加以下内容到 Functions.php,但是,这个拦截可能会和 WordPress 一些功能产生冲突,会导致这些功能不可用,目前已知会导致的冲突有后台常用的批量操作,清空操作等,你可以酌情考虑是否使用。

<?php
if (strlen($_SERVER['REQUEST_URI']) > 255) {
    wp_die('您您请求的 URL 长度 > 255,安全起见,已被本站拦截', '恶意请求防火墙', array('response' => '414'));
}
?>

哎,再次吐槽一下 360 网站安全检测,你能不能非要拦截了才能确认已经修复了这个漏洞?我觉得,漏洞修复的不应是对这个漏洞进行拦截,而是当你访问所谓的漏洞地址时,情况和正常地址一样,一切如常,这才是真正高明的漏洞修复。就像我有一次在朋友家,需要使用他的电脑,他给我用,然后就出去了,我用完后,百无聊赖的打开他那个杀毒软件,好像叫 ClamAV 吧,记得不是很清楚了,全盘杀毒,杀出了一堆病毒,这时正好他回来了,我跟他说你的电脑怎么一堆病毒,他笑了,默默地打开发现病毒的文件夹,找到那个病毒,双击,顿时,我一下子就跳了起来,你怎么能双击病毒呀!可是,结果出乎我的意料,病毒没有运行,而是弹出“选择程序运行”,那时,我才知道有 Linux 这个玩意儿(后来学习知道,他的电脑没有安装 Wine),这个不怕病毒的小众玩意儿。这才是真正高明的,电脑一堆病毒,可是病毒却跑不起来,只能留下尸体。咳~好吧,扯远了~

此文章是由nikbobo发表在WordPress分类目录,并贴了标签。将固定链接加入收藏夹。

关于 nikbobo

Nikbobo,本名刘永强,记忆空间站长,男,1998 年出生于广东茂名,至今(2014 年)15 岁,目前(2016 年)就读于茂名市第十七中学,常以“nikbobo”这个网名混迹互联网。如无特殊注明,Nikbobo 在本站发表的文章,遵循 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议。详情请参阅关于页面的作者介绍。

发表评论

电子邮件地址不会被公开。 必填项已用*标注