phpcms项目中遇到的XSS漏洞问题


因为公司的项目很多是用phpcms做的网站,在公司上班过程中遇到一个关于phpcms v9的问题。

开始经理让我检测这个网站,初次扫描整个网站,我并没有发现有什么高危漏洞,后来他给我看了一家网络安全检测公司的检测整改报告,才发现存在如下问题:


第一个就不多说了,这里主要讨论我遇到的第二个问题,也就是XSS的漏洞。

看到报告我才知道,原来xss的参数也可以是http的头部参数,这点我万万没想到(可能接触太少了)

这里先解释一下什么是Referer参数:HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

问题来了,当我们直接从地址栏打一个链接时是没有referer参数的,因为不是从一个地址链接过去,那么我们就可以抓包,对referer进行伪造(当然就算有这个参数也可以改包)。于是便出现了这个漏洞:Referer: '">alert(141)(这里我把它打全会被过滤掉)

于是我开始研究phpcms的框架结构,发现了base.php的入口文件,找到下面这句话:


显然没有经过任何过滤,直接把$_SERVER['HTTP_REFERER']取得的值给了头部HTTP_REFERER。

好,找到了根源,开始过滤吧,在base.php文件中的类函数里加了一个xss过滤函数,替换或删除掉敏感字符


然后再在前面载入这个函数:


这里$a就是经过处理后的头部信息啦,把它赋给HTTP_REFERER

再次抓包,改包,注入,不再出现反射XSS。

以下附一个常用过滤函数的网址:

最新PHP 经常用到的数据过滤的方法 - CSDN博客

你可能感兴趣的:(phpcms项目中遇到的XSS漏洞问题)