标签:
XSS报警机制(前端防火墙:第二篇)在第一章结尾的时候我就已经说了,这一章将会更详细的介绍前端防火墙的报警机制及代码。在一章出来后,有人会问为什么不直接防御,而是不防御报警呢。很简单,因为防御的话,攻击者会定位到那一段的JavaScript代码,从而下次攻击的时候绕过代码。如果不防御而报警的话,攻击者会降低警觉,不会在看JavaScript代码(至少我是这样)。回到正题,下面说的代码,是基于thinkphp框架和bootstrap3.3.5框架。如果你的网站没有使用thinkphp3.2.3框架的话,可以参照我的思路重新写一个。这里我强调一下“前端防御XSS是建立在后端忘记做过滤,没有做过滤,疏忽做过滤的基础上的...
0x01 前端要做的事
其实标题应该改成“XSS报警机制”的,因为在这一章里使用了大量的后端代码。但是第一章的标题都出来了,也没法改了。
前端要做的事情在第一章的时候就已经说了,代码如下:
现在我们就是针对第38行进行修改,改成我们后台接受的API URL。就像这样:
对,就这一行。没有其他代码。在实际的线上环境中,也只需要上面5行。可以直接copy到您的线上环境中,记得把倒数第二行的url改成自己的地址就行了。难道就那么简单?不,0x05节还有一部分前端代码。0x01~0x04主要是针对于平台。
0x02 数据库要做的事
一共两个表。fecm_user和fecm_bugdata。
fecm_user的字段信息如下:
name:管理员账户名
md5name:3次name值的md5
password:3次密码的md5
email:管理员邮箱
create_date:管理员创建时间
为了安全起见(其实就是懒)没有写添加管理员的,自行在数据库里添加
fecm_bugdata的字段信息如下:
url:漏洞的url地址
category:漏洞类型
cookies:攻击者的cookies
ua:攻击者的User-Agent
hxff_ip:攻击者的HTTP_X_FORWARDED_FOR
hci_ip:攻击者的HTTP_CLIENT_IP
ra_ip:攻击者的REMOTE_ADDR
time:攻击者攻击的时间
fixes:漏洞是否修复(0为未修复,1为已修复)
0x03 后端要做的事
因为后端代码太多,所以我就说一些核心的后端处理代码。
在0x01节里,有个核心的代码是new Image().src = ‘http://fecm.cn/Api/addVul/‘;
接下来我们来说说这个Api的处理方式(ThinkPHP代码)
public function addVul(){
if(I(‘get.category‘,‘‘,‘int‘) == ""){
$this->ajaxReturn(array(
"typeMsg" => "error",
"msgText" => "漏洞类型错误",
));
}
switch (I(‘get.category‘,‘‘,‘int‘)) {
case ‘1‘:
$vul[‘category‘] = "触发alret函数";
break;
case ‘2‘:
$vul[‘category‘] = "发现不在白名单里的第三方JavaScript资源";
break;
default:
$this->ajaxReturn(array(
"typeMsg" => "error",
"msgText" => "漏洞类型错误",
));
break;
}
if($_SERVER[‘HTTP_X_FORWARDED_FOR‘] === null){
$vul[‘hxff_ip‘] = "攻击者没有通过代理服务器访问";
}else{
$vul[‘hxff_ip‘] = I(‘server.HTTP_X_FORWARDED_FOR‘); //获取攻击者的HTTP_X_FORWARDED_FOR
}
if($_SERVER[‘HTTP_CLIENT_IP‘] === null){
$vul[‘hci_ip‘] = "攻击者数据包头部没有HTTP_CLIENT_IP";
标签:
原文地址:http://www.cnblogs.com/xdans/p/5412655.html