PHP跨站脚本攻击(XSS)漏洞修复方法(一)

今天又做了一回奥特曼(out man),居然才发现360的综合搜索变成了好搜!前几天,其实看到过一次好搜,但是以为又是DNS劫持出现的流氓搜索。

今天细看了下,居然是360综合搜索改头换面后的独立品牌:好搜(怎么读都有点山寨)。

一、惊现漏洞

好了,暂且不研究这名称到底咋样,顺手site了一下我2个网站:张戈博客和中国博客联盟。

结果,site中国博客联盟的结果吓我一跳:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

很久没理过360搜索了,一看还真吓一跳!急忙进去看了下,y原来是XSS跨站攻击漏洞!之前听无主题的博主小武提到过一次,当时是WordPress开启颜色评论后造成的XSS漏洞,因为我懒得折腾就放弃了带颜色评论的功能,避免出现XSS漏洞。没想到,中国博客联盟居然出现这么多!

二、现身说法

什么叫XSS跨站攻击漏洞?专业理论性的解释我也懒得说,自己去百度。我就举个实际的例子来说明这玩意的危害好了!

就拿之前WordPress留言来举例好了。

默认状态下,WordPress是不允许带颜色评论的,但是我们可以通过在functions.php里面插入这2行代码,强行允许评论开放所有HTML代码:

这样修改之后,WordPress确实可以留言带颜色了,比如<font color="red">红色</font>。

但是,XSS漏洞也随机而来!最简单的演示就是在博客如下带上代码留言:

留言生效后,页面一加载就会自动跳到百度首页了!

这只是XSS漏洞的一个最简单的攻击例子之一而已,上次中国博客联盟就被一个小人挂过一次黑链!看了上面的例子,你应该很猜出是怎么挂的了吧?他注册了中国博客联盟的会员,然后在提交博客时额外提交了一段js代码,后台审核时,这个js就会操作我的数据库,在首页加入对方的友链。

这种SQL注入就更加危险了!所以,如果你的网站有XSS漏洞,最好还是修复一下,避免被小人利用!

三、修复方案

好了,下面说一下简单修复方法。

先来看下360给出的修复方案:

方案一:避免XSS的方法之一主要是将用户所提供的内容输入输出进行过滤,许多语言都有提供对HTML的过滤:
可以利用下面这些函数对出现xss漏洞的参数进行过滤
PHP的htmlentities()或是htmlspecialchars()
Python 的 cgi.escape()。
ASP 的 Server.HTMLEncode()。
ASP.NET 的 Server.HtmlEncode() 或功能更强的 Microsoft Anti-Cross Site Scripting Library
Java 的 xssprotect(Open Source Library)。
Node.js 的 node-validator。

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

具体可以参考:http://webscan.360.cn/group/topic/tid/4571

之前小武就提到过,可以写代码过滤。能写代码当然好,但是自己写代码不但很麻烦,而且一个人能想到的正则过滤也可能会存在漏掉的风险,毕竟一个人考虑问题总是不会那么的全面和完善。既然360安全团队已经推出了修复插件,那不妨先试试。

我下载并部署了360写的PHP插件,感觉不错!而且WordPress颜色代码又可以安全的打开了,现在来分享一下,建议所有PHP网站都部署一下,有备无患!

四、部署方法

①、下载插件

360提供的是专站专用的插件,插件代码会有和网站对应的KEY,所以下载前请修改下面的域名部分:

将上面下载地址中的yourdomain.com改为你的域名,然后浏览器访问即可下载专用插件:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

②、上传插件

解压后,得到360safe文件夹,并上传至服务器根目录:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

③、部署插件

按照360的部署教程,是要在网站的一个公用文件(如数据库的连接文件)中加入代码:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

所以,WordPress网站可以选择添加到网站根目录下的index.php或数据库连接文件wp-config.php当中:

但是,玩WordPress的朋友都知道,这玩意更新频繁,每次版本更新,index.php这个文件十有八九是会替换的!所以最靠谱的方法是将以上代码添加到wp-config.php文件的第一个<?php 之后:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

而且,任意建站程序都建议加到数据库连接文件当中,可谓一夫当关,万夫莫开!

五、最后验证

部署完插件了,咱们就来试试效果吧!

①、最简单的验证方法

直接在WordPress原生搜索带XSS特性的代码,比如搜索:

就会出现如下拦截页面:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

②、带XSS攻击特征留言验证

依然和本文开头提到的那样,来测试留言:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

结果显然可以猜到:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

更令人欣慰的是,带颜色是可以评论的:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

六、发现缺憾

本以为能全部修复了,结果再次扫描了下中国博客联盟,360自己打脸的现象出现了:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

点进去看了下,发现已不是原来的攻击特征了:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

特意试了下WordPress的评论是否会拦截,结果依然失望:

PHP跨站脚本攻击(XSS)漏洞修复方法(一)

 

看来360写的正则过滤也不全面啊!最终还得靠自己!

七、下篇预告

在测试360的XSS防护插件存在缺憾之后,只能感叹360也就这样,真是失望哟!

于是,我决定自己写代码解决。几经折腾测试,最终搞定了这个问题!

先来2张效果预览:

PHP跨站脚本攻击(XSS)漏洞修复方法(一) PHP跨站脚本攻击(XSS)漏洞修复方法(一)

鉴于本文篇幅已经过长,所以打算另开一篇文章,来分享一下最终XSS修复方法!

对XSS漏洞修复感兴趣的童鞋,敬请期待!

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:16   其中:访客  12   博主  4

  1. 前端博客 1 来自天朝的朋友 谷歌浏览器 Windows 7 广东省中山市 电信

    看到这些XSS,我对这方面的知识知之甚少,原来还可以这样子攻击的。

  2. 老董 0 来自天朝的朋友 火狐浏览器 Windows 8.1 江苏省南通市 电信

    默认的没有添加颜色功能没有漏洞吧?

  3. 小武 6 来自天朝的朋友 谷歌浏览器 Windows 8.1 辽宁省大连市 电信

    中国博客联盟不是用的wordpress吗? 怎么这么多xss漏洞 :eek: …wordpress已经有防止xss攻击的代码了…

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 8.1 广东省深圳市 电信

      明显不是WordPress,会员中心就能看出来了。

      • 小武 6 来自天朝的朋友 谷歌浏览器 Windows 8.1 辽宁省大连市 电信

        wordpress只要不开启 颜色的支持. 就不用担心xss攻击了..

        • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 8.1 广东省深圳市 电信

          我博客已开启颜色支持,并加了过滤,就是不知道还有哪些XSS特征攻击,你在这里留言试试。

          • 小武 6 来自天朝的朋友 谷歌浏览器 Windows 8.1 北京市 方正宽带

            首先说一下你颜色的问题. .如果单纯想让留言板支持颜色, 没有必要冒这么大”风险”,你可以使用”短标签”的思路,比如[font color="red"]红色字[/font] , 然后写个js,在页面加载的时候运算留言内容,发现这样的段标签,直接转换成 对应的html标签….
            然后在说下xss的问题.. 我觉得还是去找一下代码比较好,自己写总会有漏掉的地方..我说一个我知道的,可能你没想到的. 老版本IE支持”行为文件”,就是.htc文件,在样式(css)文件中引入,htc行为文件中可以写脚本.. 所以这种东西也需要过滤..

            • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 8.1 广东省深圳市 电信

              行,就照你说的做。

              • 小武 6 来自天朝的朋友 谷歌浏览器 Windows 8.1 辽宁省大连市 电信

                至于中国博客联盟的xss漏洞问题. 要么写规则,要么去网上找. .自己写太累了.. 要是自己写就写白名单规则(也就是允许什么),不要写黑名单规则..因为写拦截有太多东西都想不到了. 我也帮你找找php解决xss漏洞的代码…反正java有现成的工具类. . 我觉得php也有.

                • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 8.1 广东省深圳市 电信

                  博客联盟的绝对没问题了,我直接过滤了html strip_tags函数

  4. 李阳博客 3 来自天朝的朋友 谷歌浏览器 Windows 7 北京市 联通

    还没注意过这个问题。

  5. 消灭星星 2 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省杭州市 电信

    文章写得很不错。

  6. 刚哥SEO博客 0 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省金华市 电信

    谢谢楼主分享!

  7. 幻影雪狮 1 来自天朝的朋友 谷歌浏览器 Windows 10 山东省 电信

    我来测试以下XSS漏洞啦啦啦啦
    window.location.href=’http://www.baidu.com’;

  8. 啊啊啊 1 来自天朝的朋友 谷歌浏览器 Windows 7 北京市 优位风尚(北京)信息技术有限公司北京电信互联网数据中心节点

    11111111sdaf的司法

  9. 小宇 0 来自天朝的朋友 QQ浏览器 Windows 7 辽宁省沈阳市 联通GSM/WCDMA/LTE共用出口

    试一下哈哈window.[color=tomato]19991[/color]location.href=’http://www.baidu.com’;

加载中,请稍候...