建站帮助

诚信合作, 高质专业!

Phpcms v9安全漏洞补丁更新,修正前台会员登录反射型XSS漏洞

2021-08-18 13:56:17 浏览 我要评论

最近忙于功能定制项目,模板和插件更新比较慢,就在前几天CMSYOU针对前台会员登录注册反射型XSS漏洞进行了测试研究、修正,对Phpcms v9安全漏洞补丁进行了更新,修复了前台会员登录反射型XSS漏洞。

Phpcms v9部分版本前台会员登录或注册页面存在一定的反射型XSS漏洞,是通过利用信息表单提交时向我们的客户端浏览器发送恶意代码,客户端进而执行恶意代码(javascript等脚本语言),从来触发XSS漏洞、返回发送的数据。

关于反射型XSS:

反射型XSS通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。

在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。

反射型XSS风险:

XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

1. 窃取cookies,读取目标网站的cookie发送到攻击者的服务器上,然后通过cookie完成网站的身份验证;

2. 读取用户未公开的资料,如果:邮件列表或者内容、系统的客户资料,联系人列表等等。它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实 施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的。

存在这方面问题的原因是Phpcms默认登录页面记录了来源网址方便在登录后返回原来的网址,而Phpcms核心文件phpcms/base.php文件中定义的获取来源的方法是:

//来源

define('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '');

并没有对$_SERVER['HTTP_REFERER']进行过滤,也就是造成了一定的反射型XSS漏洞利用风险。

Phpcms v9安全漏洞补丁更新

针对这一问题,修正方法:

$referer_new = pc_base::remove_xss($_SERVER['HTTP_REFERER']);

define('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $referer_new : '');

先对$_SERVER['HTTP_REFERER']进行安全过滤,然后再判断调用。其中的remove_xss方法,需要在base.php中自定义,具体写法可以用phpcms默认核心函数\phpcms\libs\functions\global.func.php中第80行的xss过滤函数就好:

/**

* xss过滤函数

*

* @param $string

* @return string

*/

function remove_xss($string) {

$string = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S', '', $string);

$parm1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');

$parm2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');

$parm = array_merge($parm1, $parm2);

for ($i = 0; $i < sizeof($parm); $i++) {

$pattern = '/';

for ($j = 0; $j < strlen($parm[$i]); $j++) {

if ($j > 0) {

$pattern .= '(';

$pattern .= '(&#[x|X]0([9][a][b]);?)?';

$pattern .= '|(&#0([9][10][13]);?)?';

$pattern .= ')?';

}

$pattern .= $parm[$i][$j];

}

$pattern .= '/i';

$string = preg_replace($pattern, ' ', $string);

}

return $string;

}

除此之外,可以加入了一些自定义安全过滤参数,更多尝试自由发挥。

想了解此次具体更新记录或者购买Phpcms v9安全漏洞补丁,请移步到:http://www.cmsyou.com/shop/plugins/53.html

最后,感谢大家对CMSYOU的关注,我们将不断开发分享一些实用的插件、功能模块,加油!

我要收藏
点个赞吧

相关阅读

本月热门

精选推荐

在线客服

扫一扫,关注我们

扫一扫,关注我们