今天在研究360搜索引擎优化的时候,发现360对于安全系数高的网站比较容易给一个号的排名,于是就给公司的网站和自己的网站做了一个检测,将几个网站安全分都提升到90分以上,具体细节就不说了,简单来说一下碰到一个漏洞HTTP响应拆分漏洞。当时是给海天的博客检测时发现的这个漏洞,博客是由wordpress搭建的,在网上看了情况说是wordpress一些插件会造成这个原因,经过排查后,海天的博客并不是插件的原因,而是原来设置的一个跳转造成,最后过滤下就解决了。
下面来说一下解决360网站检测HTTP响应拆分的漏洞方法。
什么是HTTP响应拆分漏洞?
HTTP响应拆分漏洞也叫“CRLF注入攻击”。CR、LF分别对应回车、换行字符。HTTP头由很多被CRLF组合分离的行构成,每行的结构都是“键值”。页面可以接受参数而改变http报头的值,造成安全威胁。
HTTP响应拆分是一个新的应用程序的攻击技术,使网页缓存中毒,跨用户涂改,如各种新的攻击,劫持用户的敏感信息和跨站点脚本(XSS)的网页。
怎么解决HTTP响应拆分漏洞?
一般只要做好过滤,将传递给HTTP报头的值做好处理就可以了。过滤代码如下:
<?php
$post = trim($post); //$post为需要过滤的参数
$post = strip_tags($post,""); //清除HTML如等代码
$post = ereg_replace("\t","",$post); //去掉制表符号
$post = ereg_replace("\r\n","",$post); //去掉回车换行符号
$post = ereg_replace("\r","",$post); //去掉回车
$post = ereg_replace("\n","",$post); //去掉换行
$post = ereg_replace(" ","",$post); //去掉空格
$post = ereg_replace("'","",$post); //去掉单引号
$post = trim($post);
?>
或者
<?php
$post = trim($post); //$post为需要过滤的参数
$post = strip_tags($post,""); //清除HTML如等代码
$post = str_replace("\n", "", str_replace(" ", "", $post));//去掉空格和换行
$post = str_replace("\t","",$post); //去掉制表符号
$post = str_replace("\r\n","",$post); //去掉回车换行符号
$post = str_replace("\r","",$post); //去掉回车
$post = str_replace("'","",$post); //去掉单引号
$post = trim($post);
?>
方便一点可以将上面的过滤代码做成函数,值需要将传递的参数通过函数过滤一遍就可以了。
<?php
function handel_http($parameter){
$parameter = trim($parameter); //$parameter为需要过滤的参数
$parameter = strip_tags($parameter,""); //清除HTML如等代码
$parameter = ereg_replace("\t","",$parameter); //去掉制表符号
$parameter = ereg_replace("\r\n","",$parameter); //去掉回车换行符号
$parameter = ereg_replace("\r","",$parameter); //去掉回车
$parameter = ereg_replace("\n","",$parameter); //去掉换行
$parameter = ereg_replace(" ","",$parameter); //去掉空格
$parameter = ereg_replace("'","",$parameter); //去掉单引号
$parameter = trim($parameter);
return $parameter;
}
?>
如需要过滤的函数是$user,则使用以下代码就完成了对$user的过滤
<?php $user = $handel_http($user); ?>