360 推出的网站漏洞监测功能真的是很方便,在一定的时候也可以作为一个参考,最近我就使用了 360 网站监测功能发现了360 提示我的站点有”HTTP响应拆分漏洞(CRLF注入攻击漏洞)”,这个是什么东东,完全不知道啊,经过一番百度之后发现使用这个漏洞还是很危险的,但是 wordpress 本身应该是不会出现这个问题,那么问题应该是出现在插件这个东西上了,经过仔细的检查之后,我终于发现了问题,也解决了这个漏洞。对于很多不会 PHP 的童靴来说,这个的确是有点难度的,那么今天我们就来详解一下“HTTP响应拆分漏洞(CRLF注入攻击漏洞)”怎样解决吧。

首先我们分析 360 提供的漏洞页面地址“http://www.yiduqiang.com/?r=XXXXX”马上就可以发现问题,? 号码后面是 r=XXXX 这个 r= 就是问题的所在了,在 PHP 当中这个 GET 形式的请求(在链接中直接表现出来的请求)一般都要过滤一些文字防止被入侵,而这个就没有做这个操作,那么我们找到了入口,就开始查看代码吧,在全站中的所有文件中查找 $_GET['r'],如果你知道你的站点是哪个文件出现问题也可以直接去搜索这个文件,单引号中的 r 代表的是链接中 ?r= 中的 r,可以根据自己的要求修改。

马上就发现了问题:

[code lang="php" title="漏洞缺少输出控制"]$redirect = $_GET['r'];
图片中的代码把 $_GET['r'] 直接给了 $redirect 变量,简单的说现在 $redirect 就是 $_GET['r'] 了,一般情况下都是要这样写的,当然,变量的名称可能会有变,既然找到了问题出处,那么我们就只用过滤这个变量的内容就好啦。
[code lang="php" title="修复漏洞输出过滤"]$redirect = trim($redirect); //去除空格
$redirect = str_replace("\t","",$redirect); //去除制表符号
$redirect = str_replace("\n", "", str_replace(" ", "", $redirect));//去除空格和换行
$redirect = str_replace("'","",$redirect); //去除单引号
$redirect = strip_tags($redirect,""); //去除HTML代码
$redirect = str_replace("\r\n","",$redirect); //去除回车换行符号
$redirect = str_replace("\r","",$redirect); //去除回车
$redirect = trim($redirect); //去除空格
直接复制上面的所有代码到 $redirect = $_GET['r']; 下面就好啦,现在再次检查网站就不会出现这个问题了,希望大家看得懂,变量名称可以根据自己的需要更换哦。

JiaJieChan发现以INove主题作为参考,这个代码一般是在Wordpress的主题目录下的 functions.php 当中。

 

本文转自:http://www.yiduqiang.com/crlf-http.html

Last modification:June 25, 2021
如果解决了你的困扰, 赏杯咖啡吧!
正文字体: 苍耳字库(屏幕显示字体)·苍耳今楷