function owPost ( method , args , callback ) {
var loadT = layer . msg ( '正在获取...' , { icon : 16 , time : 0 , shade : 0.3 } ) ;
$ . post ( '/plugins/run' , { name : 'op_waf' , func : method , args : JSON . stringify ( args ) } , function ( data ) {
layer . close ( loadT ) ;
if ( ! data . status ) {
layer . msg ( data . msg , { icon : 0 , time : 2000 , shade : [ 0.3 , '#000' ] } ) ;
return ;
}
if ( typeof ( callback ) == 'function' ) {
callback ( data ) ;
}
} , 'json' ) ;
}
function getRuleByName ( rule _name , callback ) {
owPost ( 'get_rule' , { rule _name : rule _name } , function ( data ) {
callback ( data ) ;
} ) ;
}
function setRequestCode ( ruleName , statusCode ) {
layer . open ( {
type : 1 ,
title : "设置响应代码【" + ruleName + "】" ,
area : '300px' ,
shift : 5 ,
closeBtn : 2 ,
shadeClose : true ,
content : ' < div class = "bt-form pd20 pb70" > \
< div class = "line" > \
< span class = "tname" > 响应代码 < / s p a n > \
< div class = "info-r" > \
< select id = "statusCode" class = "bt-input-text mr5" style = "width:150px;" > \
< option value = "200" '+ (statusCode == 200 ? ' selected ' : ' ') + ' > 正常 ( 200 ) < / o p t i o n > \
< option value = "404" '+ (statusCode == 404 ? ' selected ' : ' ') + ' > 文件不存在 ( 404 ) < / o p t i o n > \
< option value = "403" '+ (statusCode == 403 ? ' selected ' : ' ') + ' > 拒绝访问 ( 403 ) < / o p t i o n > \
< option value = "444" '+ (statusCode == 444 ? ' selected ' : ' ') + ' > 关闭连接 ( 444 ) < / o p t i o n > \
< option value = "500" '+ (statusCode == 500 ? ' selected ' : ' ') + ' > 应用程序错误 ( 500 ) < / o p t i o n > \
< option value = "502" '+ (statusCode == 502 ? ' selected ' : ' ') + ' > 连接超时 ( 502 ) < / o p t i o n > \
< option value = "503" '+ (statusCode == 503 ? ' selected ' : ' ') + ' > 服务器不可用 ( 503 ) < / o p t i o n > \
< / s e l e c t > \
< / d i v > \
< / d i v > \
< div class = "bt-form-submit-btn" > \
< button type = "button" class = "btn btn-success btn-sm btn-title" onclick = "setState(\''+ ruleName + '\')" > 确定 < / b u t t o n > \
< / d i v > \
< / d i v > '
} ) ;
}
function setState ( ruleName ) {
var statusCode = $ ( '#statusCode' ) . val ( ) ;
owPost ( 'set_obj_status' , { obj : ruleName , statusCode : statusCode } , function ( data ) {
var rdata = $ . parseJSON ( data . data ) ;
if ( rdata . status ) {
layer . msg ( rdata . msg , { icon : 0 , time : 2000 , shade : [ 0.3 , '#000' ] } ) ;
wafGloabl ( ) ;
} else {
layer . msg ( '设置失败!' , { icon : 0 , time : 2000 , shade : [ 0.3 , '#000' ] } ) ;
}
} ) ;
}
function setObjOpen ( ruleName ) {
owPost ( 'set_obj_open' , { obj : ruleName } , function ( data ) {
var rdata = $ . parseJSON ( data . data ) ;
if ( rdata . status ) {
layer . msg ( rdata . msg , { icon : 0 , time : 2000 , shade : [ 0.3 , '#000' ] } ) ;
wafGloabl ( ) ;
} else {
layer . msg ( '设置失败!' , { icon : 0 , time : 2000 , shade : [ 0.3 , '#000' ] } ) ;
}
} ) ;
}
function setCcRule ( cycle , limit , endtime , siteName , increase ) {
var incstr = '<li style="color:red;">此处设置仅对当前站点有效。</li>' ;
if ( siteName == 'undefined' ) {
incstr = '<li style="color:red;">此处设置的是初始值,新添加站点时将继承,对现有站点无效。</li>' ;
}
// get_aicc_config(function(res){
var enhance _mode = '' ;
// if(res.status){
// enhance_mode = 2;
// }else{
if ( increase ) {
enhance _mode = 1 ;
} else {
enhance _mode = 0 ;
}
// }
create _l = layer . open ( {
type : 1 ,
title : "设置CC规则" ,
area : '540px' ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < form class = "bt-form pd20 pb70" > \
< div class = "line" > \
< span class = "tname" > 周期 < / s p a n > \
< div class = "info-r" > < input class = "bt-input-text" name = "cc_cycle" type = "number" value = "'+ cycle + '" / > 秒 < / d i v > \
< / d i v > \
< div class = "line" > \
< span class = "tname" > 频率 < / s p a n > \
< div class = "info-r" > < input class = "bt-input-text" name = "cc_limit" type = "number" value = "'+ limit + '" / > 次 < / d i v > \
< / d i v > \
< div class = "line" > \
< span class = "tname" > 封锁时间 < / s p a n > \
< div class = "info-r" > < input class = "bt-input-text" name = "cc_endtime" type = "number" value = "'+ endtime + '" / > 秒 < / d i v > \
< / d i v > \
< div class = "line" > \
< span class = "tname" > 增强模式 < / s p a n > \
< div class = "info-r" > \
< select class = "bt-input-text mr5" style = "width:80px" name = "enhance_mode" > \
< option value = "0" '+ (enhance_mode == 0?' selected ':' ') +' > 关闭 < / o p t i o n > \
< option value = "1" '+ (enhance_mode == 1?' selected ':' ') +' > 开启 < / o p t i o n > \
< / s e l e c t > \
< / d i v > \
< / d i v > \
< div class = "line" style = "display:'+ (siteName == 'undefined'?'block':'none') +'" > \
< span class = "tname" > 四层防御 < / s p a n > \
< div class = "info-r" > \
< select class = "bt-input-text mr5" style = "width:80px" name = "cc_four_defense" > \
< option value = "0" > 关闭 < / o p t i o n > \
< option value = "1" > 开启 < / o p t i o n > \
< / s e l e c t > \
< / d i v > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > '+ incstr + ' \
< li > < font style = "color:red;" > '+ cycle + ' < / f o n t > 秒 内 累 计 请 求 同 一 U R L 超 过 < f o n t s t y l e = " c o l o r : r e d ; " > ' + l i m i t + ' < / f o n t > 次 , 触 发 C C 防 御 , 封 锁 此 I P < f o n t s t y l e = " c o l o r : r e d ; " > ' + e n d t i m e + ' < / f o n t > 秒 < / l i > \
< li > 请不要设置过于严格的CC规则 , 以免影响正常用户体验 < / l i > \
< li > < font style = "color:red;" > 增强模式 : CC防御加强版 , 开启后可能会影响用户体验 , 建议在用户受到CC攻击时开启 。 < / f o n t > < / l i > \
< li > < font style = "color:red;display:'+ (siteName == 'undefined'?'display: inline-block;':'none') +';" > 全局应用 : 全局设置当前CC规则 , 且覆盖当前全部站点的CC规则 < / f o n t > < / l i > \
< / u l > \
< div class = "bt-form-submit-btn" > < button type = "button" class = "btn btn-danger btn-sm btn_cc_all" style = "margin-right:10px;display:'+ (siteName == 'undefined'?'display: inline-block;':'none') +';" > 全局应用 < / b u t t o n > < b u t t o n t y p e = " b u t t o n " c l a s s = " b t n b t n - s u c c e s s b t n - s m b t n _ c c _ p r e s e n t " > 应 用 < / b u t t o n > < / d i v > \
< / f o r m > ' ,
success : function ( layero , index ) {
// console.log(siteName == 'undefined');
// //<option value="2" '+ (enhance_mode == 2?'selected':'') +' style="'+ (siteName != 'undefined' && enhance_mode != 2?'display:none;':'') +'">自动</option>\
// if($('[name="enhance_mode"]').val() == 2 && siteName != 'undefined'){
// $('[name="enhance_mode"]').attr('disabled','disabled');
// }
// get_stop_ip(function(rdata){
// $('[name="cc_four_defense"]').val(rdata.status?'1':'0');
// });
// $('[name="cc_four_defense"]').change(function(){
// var _val = $(this).val();
// if(_val == '0'){
// set_stop_ip_stop(function(res){
// layer.msg(res.msg,{icon:res.status?1:2});
// });
// }else{
// set_stop_ip(function(res){
// layer.msg(res.msg,{icon:res.status?1:2});
// });
// }
// });
// $('.btn_cc_all').click(function(){
// save_cc_rule(siteName,1,$('[name="enhance_mode"]').val());
// layer.close(index);
// });
// $('.btn_cc_present').click(function(){
// save_cc_rule(siteName,0,$('[name="enhance_mode"]').val());
// layer.close(index);
// });
}
} ) ;
// });
}
//设置retry规则
function setRetry ( retry _cycle , retry , retry _time , siteName ) {
create _layer = layer . open ( {
type : 1 ,
title : "设置恶意容忍规则" ,
area : '500px' ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < form class = "bt-form pd20 pb70" > \
< div class = "line" > \
< span class = "tname" > 周期 < / s p a n > \
< div class = "info-r" > < input class = "bt-input-text" name = "retry_cycle" type = "number" value = "'+ retry_cycle + '" / > 秒 < / d i v > \
< / d i v > \
< div class = "line" > \
< span class = "tname" > 频率 < / s p a n > \
< div class = "info-r" > < input class = "bt-input-text" name = "retry" type = "number" value = "'+ retry + '" / > 次 < / d i v > \
< / d i v > \
< div class = "line" > \
< span class = "tname" > 封锁时间 < / s p a n > \
< div class = "info-r" > < input class = "bt-input-text" name = "retry_time" type = "number" value = "'+ retry_time + '" / > 秒 < / d i v > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > \
< li > < font style = "color:red;" > '+ retry_cycle + ' < / f o n t > 秒 内 累 计 恶 意 请 求 超 过 < f o n t s t y l e = " c o l o r : r e d ; " > ' + r e t r y + ' < / f o n t > 次 , 封 锁 < f o n t s t y l e = " c o l o r : r e d ; " > ' + r e t r y _ t i m e + ' < / f o n t > 秒 < / l i > \
< li > < font style = "color:red;" > 全局应用 : 全局设置当前恶意容忍规则 , 且覆盖当前全部站点的恶意容忍规则 < / l i > \
< / u l > \
< div class = "bt-form-submit-btn" > < button type = "button" class = "btn btn-danger btn-sm btn_retry_all" style = "margin-right:10px;display:'+ (siteName == undefined?'inline-block;':'none') +';" > 全局应用 < / b u t t o n > < b u t t o n t y p e = " b u t t o n " c l a s s = " b t n b t n - s u c c e s s b t n - s m b t n _ r e t r y _ p r e s e n t " > 应 用 < / b u t t o n > < / d i v > \
< / f o r m > ' ,
success : function ( ) {
$ ( '.btn_retry_all' ) . click ( function ( ) {
saveRetry ( siteName , 1 ) ;
} ) ;
$ ( '.btn_retry_present' ) . click ( function ( ) {
saveRetry ( siteName , 0 ) ;
} ) ;
}
} ) ;
}
//保存retry规则
function saveRetry ( siteName , type ) {
var pdata = {
siteName : siteName ,
retry : $ ( "input[name='retry']" ) . val ( ) ,
retry _time : $ ( "input[name='retry_time']" ) . val ( ) ,
retry _cycle : $ ( "input[name='retry_cycle']" ) . val ( ) ,
is _open _global : type
}
var act = 'set_retry' ;
if ( siteName != undefined ) act = 'set_site_retry' ;
owPost ( act , pdata , function ( data ) {
var rdata = $ . parseJSON ( data . data ) ;
layer . msg ( rdata . msg , { icon : rdata . status ? 1 : 2 } ) ;
layer . close ( create _layer ) ;
wafGloablRefresh ( 1000 ) ;
} ) ;
}
//URL白名单
function urlWhite ( type ) {
if ( type == undefined ) {
layer . open ( {
type : 1 ,
title : "管理URL白名单" ,
area : [ '500px' , '400px' ] ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < div class = "tab_list" > < div class = "tab_block active" > 标准模式 - URL白名单 < / d i v > < d i v c l a s s = " t a b _ b l o c k " > 增 强 模 式 — U R L 白 名 单 < / d i v > < / d i v > \
< div class = "pd15" > \
< div class = "url_block" > \
< div style = "border-bottom:#ccc 1px solid;margin-bottom:10px;padding-bottom:10px" > \
< input class = "bt-input-text" name = "url_white_address" type = "text" value = "" style = "width:400px;margin-right:15px;margin-left:5px" placeholder = "URL地址,支持正则表达式" > \
< button class = "btn btn-success btn-sm va0 pull-right" onclick = "add_url_white();" > 添加 < / b u t t o n > \
< / d i v > \
< div class = "divtable" > \
< div id = "urlWhite" style = "max-height:300px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none" > \
< thead > \
< tr > \
< th > URL < / t h > \
< th style = "text-align: right;" > 操作 < / t h > \
< / t r > \
< / t h e a d > \
< tbody id = "url_white_con" class = "gztr" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< div class = "btn-list" > \
< button class = "btn btn-success btn-sm va0 mr5 mt10" onclick = "file_input(\'url_white\')" > 导入 < / b u t t o n > \
< button class = "btn btn-success btn-sm va0 mt10" onclick = "output_data(\'url_white\')" > 导出 < / b u t t o n > \
< / d i v > \
< / d i v > \
< / d i v > \
< div class = "url_block" style = "display:none" > \
< div style = "border-bottom:#ccc 1px solid;margin-bottom:10px;padding-bottom:10px" > \
< input class = "bt-input-text" name = "url_increase_white_address" type = "text" value = "" style = "width:400px;margin-right:15px;margin-left:5px" placeholder = "URL地址,支持正则表达式" > \
< button class = "btn btn-success btn-sm va0 pull-right add_increase_white_event" > 添加 < / b u t t o n > \
< / d i v > \
< div class = "divtable" > \
< div id = "url_increase_white" style = "max-height:300px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none" > \
< thead > \
< tr > \
< th > URL < / t h > \
< th style = "text-align: right;" > 操作 < / t h > \
< / t r > \
< / t h e a d > \
< tbody id = "url_increase_white_con" class = "gztr" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< / d i v > \
< / d i v > \
< ul class = "help-info-text c7" > \
< li > 所有规则对白名单中的URL无效 , 包括IP黑名单和URL黑名单 < / l i > \
< / u l > < / d i v > ' ,
success : function ( layero , index ) {
$ ( '.tab_list .tab_block' ) . click ( function ( ) {
var index = $ ( this ) . index ( ) ;
$ ( this ) . addClass ( 'active' ) . siblings ( ) . removeClass ( 'active' ) ;
$ ( '.url_block' ) . eq ( index ) . show ( ) . siblings ( ) . hide ( ) ;
if ( index == 1 ) { get _golbls _cc ( ) ; }
} ) ;
$ ( '.add_increase_white_event' ) . click ( function ( ) {
var _val = $ ( '[name="url_increase_white_address"]' ) . val ( ) ;
if ( _val == '' ) {
layer . msg ( 'URL规则不能为空!' ) ;
return false ;
}
add _golbls _cc ( { text : _val } , function ( res ) {
if ( res . status ) {
get _golbls _cc ( function ( ) {
if ( res . status ) get _golbls _cc ( function ( ) {
layer . msg ( res . msg , { icon : res . status ? 1 : 2 } ) ;
} ) ;
} ) ;
$ ( '[name="url_increase_white_address"]' ) . val ( '' ) ;
}
} ) ;
} ) ;
$ ( '#url_increase_white_con' ) . on ( 'click' , '.del_golbls_cc' , function ( ) {
var _val = $ ( this ) . attr ( 'data-val' ) ;
del _golbls _cc ( { text : _val } , function ( res ) {
if ( res . status ) get _golbls _cc ( function ( ) {
layer . msg ( res . msg , { icon : res . status ? 1 : 2 } ) ;
} ) ;
} ) ;
} ) ;
}
} ) ;
tableFixed ( "urlWhite" ) ;
}
getRuleByName ( 'url_white' , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = $ . parseJSON ( tmp . data ) ;
console . log ( rdata ) ;
var tbody = ''
for ( var i = 0 ; i < rdata . length ; i ++ ) {
tbody += ' < tr > \
< td > '+ rdata[i] + ' < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "remove_url_white('+ i + ')" > 删除 < / a > < / t d > \
< / t r > '
}
$ ( "#url_white_con" ) . html ( tbody ) ;
} ) ;
}
//设置规则
function setObjConf ( ruleName , type ) {
if ( type == undefined ) {
create _l = layer . open ( {
type : 1 ,
title : "编辑规则【" + ruleName + "】" ,
area : [ '700px' , '530px' ] ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < div class = "pd15" > \
< div style = "border-bottom:#ccc 1px solid;margin-bottom:10px;padding-bottom:10px" > \
< input class = "bt-input-text" name = "ruleValue" type = "text" value = "" style = "width:470px;margin-right:12px;" placeholder = "规则内容,请使用正则表达式" > \
< input class = "bt-input-text mr5" name = "rulePs" type = "text" style = "width:120px;" placeholder = "描述" > \
< button class = "btn btn-success btn-sm va0 pull-right" onclick = "add_rule(\''+ ruleName + '\');" > 添加 < / b u t t o n > \ < / d i v > \
< div class = "divtable" > \
< div id = "jc-file-table" class = "table_head_fix" style = "max-height:300px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none" > \
< thead > \
< tr > \
< th width = "360" > 规则 < / t h > \
< th > 说明 < / t h > \
< th > 操作 < / t h > \
< th style = "text-align: right;" > 状态 < / t h > \
< / t r > \
< / t h e a d > \
< tbody id = "set_obj_conf_con" class = "gztr" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > \
< li style = "color:red;" > 注意 : 如果您不了解正则表达式 , 请不要随意修改规则内容 < / l i > \
< li > 您可以添加或修改规则内容 , 但请使用正则表达式 < / l i > \
< li > 内置规则允许修改 , 但不可以直接删除 , 您可以设置规则状态来定义防火墙是否使用此规则 < / l i > \
< / u l > < / d i v > '
} ) ;
tableFixed ( "jc-file-table" ) ;
}
getRuleByName ( ruleName , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = $ . parseJSON ( tmp . data ) ;
var tbody = ''
for ( var i = 0 ; i < rdata . length ; i ++ ) {
var removeRule = ''
if ( rdata [ i ] [ 3 ] != 0 ) removeRule = ' | <a class="btlink" onclick="remove_rule(\'' + ruleName + '\',' + i + ')">删除</a>' ;
tbody += ' < tr > \
< td class = "rule_body_'+ i + '" > ' + rdata[i][1] + ' < / t d > \
< td class = "rule_ps_'+ i + '" > ' + rdata[i][2] + ' < / t d > \
< td class = "rule_modify_'+ i + '" > < a class = "btlink" onclick = "modify_rule(' + i + ',\'' + ruleName + '\')" > 编辑 < / a > ' + r e m o v e R u l e + ' < / t d > \
< td class = "text-right" > \
< div class = "pull-right" > \
< input class = "btswitch btswitch-ios" id = "closeua_'+ i + '" type = "checkbox" ' + (rdata[i][0] ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" style = "width:2.0em;height:1.2em;margin-bottom: 0" for = "closeua_'+ i + '" onclick = "set_rule_state(\'' + ruleName + '\',' + i + ')" > < / l a b e l > \
< / d i v > \
< / t d > \
< / t r > '
}
$ ( "#set_obj_conf_con" ) . html ( tbody ) ;
} ) ;
}
//常用扫描器
function scanRule ( ) {
getRuleByName ( 'scan_black' , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = $ . parseJSON ( tmp . data ) ;
create _l = layer . open ( {
type : 1 ,
title : "常用扫描器过滤规则" ,
area : '650px' ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < form class = "bt-form pd20 pb70" > \
< div class = "line" > \
< span class = "tname" > Header < / s p a n > \
< div class = "info-r" > < textarea style = "margin: 0px;width:475px;height: 75px;line-height:20px" class = "bt-input-text" name = "scan_header" > '+ rdata.header + ' < / t e x t a r e a > < / d i v > \
< / d i v > \
< div class = "line" > \
< span class = "tname" > Cookie < / s p a n > \
< div class = "info-r" > < textarea style = "margin: 0px;width:475px;height: 75px;line-height:20px" class = "bt-input-text" name = "scan_cookie" > '+ rdata.cookie + ' < / t e x t a r e a > < / d i v > \
< / d i v > \
< div class = "line" > \
< span class = "tname" > Args < / s p a n > \
< div class = "info-r" > < textarea style = "margin: 0px;width:475px;height: 75px;line-height:20px" class = "bt-input-text" name = "scan_args" > '+ rdata.args + ' < / t e x t a r e a > < / d i v > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > \
< li > 会同时过滤key和value , 请谨慎设置 < / l i > \
< li > 请使用正则表达式 , 提交前应先备份原有表达式 < / l i > \
< / u l > \
< div class = "bt-form-submit-btn" > \
< button type = "button" class = "btn btn-success btn-sm btn-title" onclick = "saveScanRule()" > 确定 < / b u t t o n > \
< / d i v > \
< / f o r m > '
} ) ;
} ) ;
}
//保存扫描器规则
function saveScanRule ( ) {
pdata = {
header : $ ( "textarea[name='scan_header']" ) . val ( ) ,
cookie : $ ( "textarea[name='scan_cookie']" ) . val ( ) ,
args : $ ( "textarea[name='scan_args']" ) . val ( )
}
owPost ( 'save_scan_rule' , pdata , function ( data ) {
var rdata = $ . parseJSON ( data . data ) ;
layer . msg ( rdata . msg , { icon : rdata . status ? 1 : 2 } ) ;
layer . close ( create _l ) ;
wafGloablRefresh ( 1000 ) ;
} ) ;
}
//IP白名单
function ipWhite ( type ) {
if ( type == undefined ) {
create _l = layer . open ( {
type : 1 ,
title : "管理IP白名单" ,
area : [ '500px' , '500px' ] ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < div class = "pd15 ipv4_list" > \
< div style = "border-bottom:#ccc 1px solid;margin-bottom:10px;padding-bottom:10px" > \
< input class = "bt-input-text" name = "start_ip" type = "text" value = "" style = "width:180px;margin-right:15px;margin-left:5px" placeholder = "起始IP地址" > \
< input class = "bt-input-text mr5" name = "end_ip" type = "text" style = "width:180px;margin-left:5px;margin-right:20px" placeholder = "结束IP地址" > \
< button class = "btn btn-success btn-sm va0 pull-right" onclick = "add_ip_white();" > 添加 < / b u t t o n > \ < / d i v > \
< div class = "divtable" > \
< div id = "ipWhite" style = "max-height:300px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none" > \
< thead > \
< tr > \
< th > 超始IP < / t h > \
< th > 结束IP < / t h > \
< th style = "text-align: right;" > 操作 < / t h > \
< / t r > \
< / t h e a d > \
< tbody id = "ip_white_con" class = "gztr" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< / d i v > \
< div style = "width:100%" class = "mt5" > \
< button class = "btn btn-success btn-sm va0 mr5 mt10" onclick = "file_input(\'ip_white\')" > 导入 < / b u t t o n > \
< button class = "btn btn-success btn-sm va0 mt10" onclick = "output_data(\'ip_white\')" > 导出 < / b u t t o n > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > \
< li > 所有规则对白名单中的IP段无效 , 包括IP黑名单和URL黑名单 , IP白名单具备最高优先权 < / l i > \
< / u l > \
< / d i v > \
< div class = "pd15 ipv6_list" > \
< / d i v > ' ,
success : function ( index , layero ) {
// $('.tab_list .tab_block').click(function(){
// $(this).addClass('active').siblings().removeClass('active');
// console.log($(this).index());
// if($(this).index() === 0){
// $('.ipv4_list').show().next().hide();
// }else{
// $('.ipv4_list').hide().next().show();
// }
// });
// <div class="tab_list"><div class="tab_block active">IPv4白名单</div><div class="tab_block">IPv6白名单</div></div>\
}
} ) ;
tableFixed ( "ipWhite" ) ;
}
getRuleByName ( 'ip_white' , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = $ . parseJSON ( tmp . data ) ;
var tbody = ''
for ( var i = 0 ; i < rdata . length ; i ++ ) {
tbody += ' < tr > \
< td > '+ rdata[i][0].join(' . ') + ' < / t d > \
< td > '+ rdata[i][1].join(' . ') + ' < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "remove_ip_white('+ i + ')" > 删除 < / a > < / t d > \
< / t r > '
}
$ ( "#ip_white_con" ) . html ( tbody ) ;
} ) ;
}
//IP黑名单
function ipBlack ( type ) {
if ( type == undefined ) {
create _l = layer . open ( {
type : 1 ,
title : "管理IP黑名单" ,
area : [ '500px' , '500px' ] ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < div class = "tab_list" > < div class = "tab_block active" > IPv4黑名单 < / d i v > < d i v c l a s s = " t a b _ b l o c k " > I P v 6 黑 名 单 < / d i v > < / d i v > \
< div class = "pd15 ipv4_block" > \
< div style = "border-bottom:#ccc 1px solid;margin-bottom:10px;padding-bottom:10px" > \
< input class = "bt-input-text" name = "start_ip" type = "text" value = "" style = "width:150px;margin-right:15px;margin-left:5px" placeholder = "起始IP地址" > \
< input class = "bt-input-text mr5" name = "end_ip" type = "text" style = "width:150px;margin-left:5px;margin-right:20px" placeholder = "结束IP地址" > \
< button class = "btn btn-success btn-sm va0 pull-right" onclick = "add_ip_black();" > 添加 < / b u t t o n > \ < / d i v > \
< div class = "divtable" > \
< div id = "ipBlack" style = "max-height:300px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none" > \
< thead > \
< tr > \
< th > 超始IP < / t h > \
< th > 结束IP < / t h > \
< th style = "text-align: right;" > 操作 < / t h > \
< / t r > \
< / t h e a d > \
< tbody id = "ip_black_con" class = "gztr" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< div style = "width:100%" class = "mt10" > \
< button class = "btn btn-success btn-sm va0 mr5 mt10" onclick = "file_input(\'ip_black\')" > 导入 < / b u t t o n > \
< button class = "btn btn-success btn-sm va0 mt10" onclick = "output_data(\'ip_black\')" > 导出 < / b u t t o n > \
< / d i v > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > \
< li > 黑名单中的IP段将被禁止访问 , IP白名单中已存在的除外 < / l i > \
< / u l > \
< / d i v > \
< div class = "pd15 ipv6_block" > \
< div style = "border-bottom:#ccc 1px solid;margin-bottom:10px;padding-bottom:10px" > \
< input class = "bt-input-text" name = "ipv6_address" type = "text" style = "width:380px;margin-right:15px;margin-left:5px" placeholder = "ipv6地址" > \
< button class = "btn btn-success btn-sm va0 btn_add_ipv6" style = "margin-left:15px;" > 添加 < / b u t t o n > \
< / d i v > \
< div class = "divtable" > \
< div id = "ipv6_black" style = "max-height:300px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none" > \
< thead > < tr > < th > IPv6地址 < / t h > < t h s t y l e = " t e x t - a l i g n : r i g h t ; " > 操 作 < / t h > < / t r > < / t h e a d > \
< tbody id = "ipv6_black_con" class = "gztr" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > \
< li > 黑名单中的IP段将被禁止访问 , IP白名单中已存在的除外 < / l i > \
< / u l > \
< / d i v > ' ,
success : function ( index , layero ) {
$ ( '.tab_list .tab_block' ) . click ( function ( ) {
$ ( this ) . addClass ( 'active' ) . siblings ( ) . removeClass ( 'active' ) ;
if ( $ ( this ) . index ( ) === 0 ) {
$ ( '.ipv4_block' ) . show ( ) . next ( ) . hide ( ) ;
// var loadT = layer.msg('正在获取防火墙配置..', { icon: 16, time: 0 });
// get_ipv4_address(function(rdata){
// layer.close(loadT);
// var tbody = ''
// for (var i = 0; i < rdata.length; i++) {
// tbody += '<tr>\
// <td>'+ rdata[i][0].join('.') + '</td>\
// <td>'+ rdata[i][1].join('.') + '</td>\
// <td class="text-right"><a class="btlink" onclick="remove_ip_black('+ i + ')">删除</a></td>\
// </tr>'
// }
// $("#ip_black_con").html(tbody)
// });
getRuleByName ( 'ip_black' , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = $ . parseJSON ( tmp . data ) ;
console . log ( rdata ) ;
var tbody = ''
for ( var i = 0 ; i < rdata . length ; i ++ ) {
tbody += ' < tr > \
< td > '+ rdata[i][0].join(' . ') + ' < / t d > \
< td > '+ rdata[i][1].join(' . ') + ' < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "remove_ip_white('+ i + ')" > 删除 < / a > < / t d > \
< / t r > '
}
$ ( "#ip_black_con" ) . html ( tbody ) ;
} ) ;
} else {
$ ( '.ipv4_block' ) . hide ( ) . next ( ) . show ( ) ;
// var loadT = layer.msg('正在获取防火墙配置..', { icon: 16, time: 0 });
// get_ipv6_address(function(res){
// layer.close(loadT);
// var tbody = '',rdata = res.msg;
// for (var i = 0; i < rdata.length; i++) {
// tbody += '<tr>\
// <td>'+ rdata[i] + '</td>\
// <td class="text-right"><a class="btlink" onclick="remove_ipv6_black(\''+ rdata[i] + '\')">删除</a></td>\
// </tr>'
// }
// $("#ipv6_black_con").html(tbody)
// });
}
} ) ;
$ ( '.btn_add_ipv6' ) . click ( function ( ) {
var ipv6 = $ ( '[name="ipv6_address"]' ) . val ( ) ;
var loadT = layer . msg ( '正在添加ipv6黑名单数据,请稍后...' , { icon : 16 , time : 0 } ) ;
add _ipv6 _req ( ipv6 , function ( res ) {
layer . close ( loadT ) ;
layer . msg ( res . msg , { icon : res . status ? 1 : 2 } ) ;
if ( res . status ) {
$ ( '[name="ipv6_address"]' ) . val ( '' ) ;
$ ( '.tab_list .tab_block:eq(1)' ) . click ( ) ;
}
} ) ;
} ) ;
$ ( '.tab_list .tab_block:eq(0)' ) . click ( ) ;
}
} ) ;
tableFixed ( "ipBlack" ) ;
}
}
//URL黑名单
function urlBlack ( type ) {
if ( type == undefined ) {
create _l = layer . open ( {
type : 1 ,
title : "管理URL黑名单" ,
area : [ '500px' , '400px' ] ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < div class = "pd15" > \
< div style = "border-bottom:#ccc 1px solid;margin-bottom:10px;padding-bottom:10px" > \
< input class = "bt-input-text" name = "url_black_address" type = "text" value = "" style = "width:400px;margin-right:15px;margin-left:5px" placeholder = "URL地址,支持正则表达式" > \
< button class = "btn btn-success btn-sm va0 pull-right" onclick = "add_url_black();" > 添加 < / b u t t o n > \ < / d i v > \
< div class = "divtable" > \
< div id = "urlBlack" style = "max-height:300px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none" > \
< thead > \
< tr > \
< th > URL < / t h > \
< th style = "text-align: right;" > 操作 < / t h > \
< / t r > \
< / t h e a d > \
< tbody id = "url_black_con" class = "gztr" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< div style = "width:100%" class = "pull-left" > \
< button class = "btn btn-success btn-sm va0 pull-left mr5 mt10" onclick = "file_input(\'url_black\')" > 导入 < / b u t t o n > \
< button class = "btn btn-success btn-sm va0 pull-left mt10" onclick = "output_data(\'url_black\')" > 导出 < / b u t t o n > \
< / d i v > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > \
< li > 禁止访问URL黑名单 , URL白名单和IP白名单中存在时除外 < / l i > \
< / u l > < / d i v > '
} ) ;
tableFixed ( "urlBlack" ) ;
}
getRuleByName ( 'url_black' , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = $ . parseJSON ( tmp . data ) ;
console . log ( rdata ) ;
var tbody = ''
for ( var i = 0 ; i < rdata . length ; i ++ ) {
tbody += ' < tr > \
< td > '+ rdata[i] + ' < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "remove_url_white('+ i + ')" > 删除 < / a > < / t d > \
< / t r > '
}
$ ( "#url_black_con" ) . html ( tbody ) ;
} ) ;
}
function wafScreen ( ) {
owPost ( 'waf_srceen' , { } , function ( data ) {
var rdata = $ . parseJSON ( data . data ) ;
console . log ( rdata ) ;
var con = '<div class="wavbox alert alert-success" style="margin-right:16px">总拦截<span>' + rdata . total + '</span>次</div>' ;
con += '<div class="wavbox alert alert-info" style="margin-right:16px">安全防护<span>0</span>天</div>' ;
con += ' < div class = "screen" > \
< div class = "line" > < span class = "name" > POST渗透 < / s p a n > < s p a n c l a s s = " v a l " > ' + r d a t a . r u l e s . p o s t + ' < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > GET渗透 < / s p a n > < s p a n c l a s s = " v a l " > 0 < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > CC攻击 < / s p a n > < s p a n c l a s s = " v a l " > ' + r d a t a . r u l e s . c c + ' < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > 恶意User - Agent < / s p a n > < s p a n c l a s s = " v a l " > ' + r d a t a . r u l e s . u s e r _ a g e n t + ' < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > Cookie渗透 < / s p a n > < s p a n c l a s s = " v a l " > ' + r d a t a . r u l e s . c o o k i e + ' < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > 恶意扫描 < / s p a n > < s p a n c l a s s = " v a l " > 0 < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > 恶意HEAD请求 < / s p a n > < s p a n c l a s s = " v a l " > 0 < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > URI自定义拦截 < / s p a n > < s p a n c l a s s = " v a l " > 0 < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > URI保护 < / s p a n > < s p a n c l a s s = " v a l " > 0 < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > 恶意文件上传 < / s p a n > < s p a n c l a s s = " v a l " > 0 < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > 禁止的扩展名 < / s p a n > < s p a n c l a s s = " v a l " > 0 < / s p a n > < / d i v > \
< div class = "line" > < span class = "name" > 禁止PHP脚本 < / s p a n > < s p a n c l a s s = " v a l " > 0 < / s p a n > < / d i v > \
< / d i v > ' ;
con += ' < div style = "width:660px;" > < ul class = "help-info-text c7" > \
< li > 在此处关闭防火墙后 , 所有站点将失去保护 < / l i > \
< li > 网站防火墙会使nginx有一定的性能损失 ( & lt ; 5 % 10 C静态并发测试结果 ) < / l i > \
< li > 网站防火墙仅主要针对网站渗透攻击 , 暂时不具备系统加固功能 < / l i > \
< / u l > < / d i v > ' ;
$ ( ".soft-man-con" ) . html ( con ) ;
} ) ;
}
function wafGloablRefresh ( time ) {
setTimeout ( function ( ) {
wafGloabl ( ) ;
} , time ) ;
}
function wafGloabl ( ) {
owPost ( 'waf_conf' , { } , function ( data ) {
var rdata = $ . parseJSON ( data . data ) ;
var con = ' < div class = "divtable" > \
< table class = "table table-hover waftable" > \
< thead > < tr > < th width = "18%" > 名称 < / t h > \
< th width = "44%" > 描述 < / t h > \
< th width = "10%" > 响应 < / t h > \
< th style = "text-align: center;" width = "10%" > 状态 < / t h > \
< th style = "text-align: right;" > 操作 < / t h > < / t r > \
< / t h e a d > \
< tbody > \
< tr > < td > CC防御 < / t d > \
< td > 防御CC攻击 , 具体防御参数请到站点配置中调整 < / t d > \
< td > < a class = "btlink" onclick = "setRequestCode(\'cc\','+rdata.cc.status+')" > '+rdata.cc.status+' < / a > < / t d > \
< td > < div class = "ssh-item" > \
< input class = "btswitch btswitch-ios" id = "closecc" type = "checkbox" '+(rdata.cc.open ? ' checked ' : ' ')+' > \
< label class = "btswitch-btn" for = "closecc" onclick = "setObjOpen(\'cc\')" > < / l a b e l > < / d i v > \
< / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "setCcRule('+rdata.cc.cycle+','+rdata.cc.limit+','+rdata.cc.endtime+',\'undefined\','+rdata.cc.increase+')" > 初始规则 < / a > < / t d > \
< / t r > \
< tr > \
< td > 恶意容忍度 < / t d > \
< td > 封锁连续恶意请求 , 请到站点配置中调整容忍阈值 < / t d > \
< td > < a class = "btlink" onclick = "setRequestCode(\'cc\','+ rdata.cc.status + ')" > ' + rdata.cc.status + ' < / a > < / t d > \
< td style = "text-align: center;" > -- < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "setRetry('+ rdata.retry.retry_cycle + ',' + rdata.retry.retry + ',' + rdata.retry.retry_time + ')" > 初始规则 < / a > < / t d > \
< / t r > \
< tr > \
< td > GET - URI过滤 < / t d > \
< td > '+ rdata.get.ps + ' < / t d > \
< td > < a class = "btlink" onclick = "setRequestCode(\'get\',' + rdata.get.status + ')" > ' + rdata.get.status + ' < / a > < / t d > \
< td > < div class = "ssh-item" > \
< input class = "btswitch btswitch-ios" id = "closeget" type = "checkbox" '+ (rdata.get.open ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closeget" onclick = "setObjOpen(\'get\')" > < / l a b e l > \
< / d i v > < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "setObjConf(\'url\')" > 规则 < / a > | < a c l a s s = " b t l i n k " h r e f = " j a v a s c r i p t : ; " o n c l i c k = " o n l i n e E d i t F i l e ( 0 , \ ' ' + r d a t a [ ' r e q f i l e _ p a t h ' ] + ' / g e t . h t m l \ ' ) " > 响 应 内 容 < / a > < / t d > \
< / t r > \
< tr > \
< td > GET - 参数过滤 < / t d > < t d > ' + r d a t a . g e t . p s + ' < / t d > < t d > < a c l a s s = " b t l i n k " o n c l i c k = " s e t R e q u e s t C o d e ( \ ' g e t \ ' , ' + r d a t a . g e t . s t a t u s + ' ) " > ' + r d a t a . g e t . s t a t u s + ' < / a > < / t d > < t d > < d i v c l a s s = " s s h - i t e m " > \
< input class = "btswitch btswitch-ios" id = "closeget" type = "checkbox" '+ (rdata.get.open ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closeget" onclick = "setObjOpen(\'get\')" > < / l a b e l > \
< / d i v > < / t d > < t d c l a s s = " t e x t - r i g h t " > < a c l a s s = " b t l i n k " o n c l i c k = " s e t O b j C o n f ( \ ' a r g s \ ' ) " > 规 则 < / a > | < a c l a s s = " b t l i n k " h r e f = " j a v a s c r i p t : ; " o n c l i c k = " o n l i n e E d i t F i l e ( 0 , \ ' ' + r d a t a [ ' r e q f i l e _ p a t h ' ] + ' / g e t . h t m l \ ' ) " > 响 应 内 容 < / a > < / t d > \
< / t r > \
< tr > \
< td > POST过滤 < / t d > < t d > ' + r d a t a . p o s t . p s + ' < / t d > < t d > < a c l a s s = " b t l i n k " o n c l i c k = " s e t R e q u e s t C o d e ( \ ' p o s t \ ' , ' + r d a t a . p o s t . s t a t u s + ' ) " > ' + r d a t a . p o s t . s t a t u s + ' < / a > < / t d > < t d > < d i v c l a s s = " s s h - i t e m " > \
< input class = "btswitch btswitch-ios" id = "closepost" type = "checkbox" '+ (rdata.post.open ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closepost" onclick = "setObjOpen(\'post\')" > < / l a b e l > \
< / d i v > < / t d > < t d c l a s s = " t e x t - r i g h t " > < a c l a s s = " b t l i n k " o n c l i c k = " s e t O b j C o n f ( \ ' p o s t \ ' ) " > 规 则 < / a > | < a c l a s s = " b t l i n k " h r e f = " j a v a s c r i p t : ; " o n c l i c k = " o n l i n e E d i t F i l e ( 0 , \ ' ' + r d a t a [ ' r e q f i l e _ p a t h ' ] + ' / p o s t . h t m l \ ' ) " > 响 应 内 容 < / a > < / t d > \
< / t r > \
< tr > \
< td > User - Agent过滤 < / t d > < t d > ' + r d a t a [ ' u s e r - a g e n t ' ] . p s + ' < / t d > < t d > < a c l a s s = " b t l i n k " o n c l i c k = " s e t R e q u e s t C o d e ( \ ' u s e r - a g e n t \ ' , ' + r d a t a [ ' u s e r - a g e n t ' ] . s t a t u s + ' ) " > ' + r d a t a [ ' u s e r - a g e n t ' ] . s t a t u s + ' < / a > < / t d > < t d > < d i v c l a s s = " s s h - i t e m " > \
< input class = "btswitch btswitch-ios" id = "closeua" type = "checkbox" '+ (rdata[' user - agent '].open ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closeua" onclick = "setObjOpen(\'user-agent\')" > < / l a b e l > \
< / d i v > < / t d > < t d c l a s s = " t e x t - r i g h t " > < a c l a s s = " b t l i n k " o n c l i c k = " s e t O b j C o n f ( \ ' u s e r _ a g e n t \ ' ) " > 规 则 < / a > | < a c l a s s = " b t l i n k " h r e f = " j a v a s c r i p t : ; " o n c l i c k = " o n l i n e E d i t F i l e ( 0 , \ ' ' + r d a t a [ ' r e q f i l e _ p a t h ' ] + ' / u s e r _ a g e n t . h t m l \ ' ) " > 响 应 内 容 < / a > < / t d > \
< / t r > \
< tr > \
< td > Cookie过滤 < / t d > < t d > ' + r d a t a . c o o k i e . p s + ' < / t d > < t d > < a c l a s s = " b t l i n k " o n c l i c k = " s e t R e q u e s t C o d e ( \ ' c o o k i e \ ' , ' + r d a t a . c o o k i e . s t a t u s + ' ) " > ' + r d a t a . c o o k i e . s t a t u s + ' < / a > < / t d > < t d > < d i v c l a s s = " s s h - i t e m " > \
< input class = "btswitch btswitch-ios" id = "closecookie" type = "checkbox" '+ (rdata.cookie.open ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closecookie" onclick = "setObjOpen(\'cookie\')" > < / l a b e l > \
< / d i v > < / t d > < t d c l a s s = " t e x t - r i g h t " > < a c l a s s = " b t l i n k " o n c l i c k = " s e t O b j C o n f ( \ ' c o o k i e \ ' ) " > 规 则 < / a > | < a c l a s s = " b t l i n k " h r e f = " j a v a s c r i p t : ; " o n c l i c k = " o n l i n e E d i t F i l e ( 0 , \ ' ' + r d a t a [ ' r e q f i l e _ p a t h ' ] + ' / c o o k i e . h t m l \ ' ) " > 响 应 内 容 < / a > < / t d > \
< / t r > \
< tr > \
< td > 常见扫描器 < / t d > < t d > ' + r d a t a . s c a n . p s + ' < / t d > < t d > < a c l a s s = " b t l i n k " o n c l i c k = " s e t R e q u e s t C o d e ( \ ' s c a n \ ' , ' + r d a t a . s c a n . s t a t u s + ' ) " > ' + r d a t a . s c a n . s t a t u s + ' < / a > < / t d > < t d > < d i v c l a s s = " s s h - i t e m " > \
< input class = "btswitch btswitch-ios" id = "closescan" type = "checkbox" '+ (rdata.scan.open ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closescan" onclick = "setObjOpen(\'scan\')" > < / l a b e l > \
< / d i v > < / t d > < t d c l a s s = " t e x t - r i g h t " > < a c l a s s = " b t l i n k " o n c l i c k = " s c a n R u l e ( ) " > 设 置 < / a > < / t d > \
< / t r > \
< tr > \
< td > IP白名单 < / t d > < t d > 所 有 规 则 对 I P 白 名 单 无 效 < / t d > < t d s t y l e = " t e x t - a l i g n : c e n t e r ; " > - - < / t d > \
< td style = "text-align: center;" > -- < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "ipWhite()" > 设置 < / a > < / t d > \
< / t r > \
< tr > \
< td > IP黑名单 < / t d > < t d > 禁 止 访 问 的 I P < / t d > < t d > < a c l a s s = " b t l i n k " o n c l i c k = " s e t R e q u e s t C o d e ( \ ' c c \ ' , ' + r d a t a . c c . s t a t u s + ' ) " > ' + r d a t a . c c . s t a t u s + ' < / a > < / t d > \
< td style = "text-align: center;" > -- < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "ipBlack()" > 设置 < / a > < / t d > \
< / t r > \
< tr > \
< td > URL白名单 < / t d > < t d > 大 部 分 规 则 对 U R L 白 名 单 无 效 < / t d > < t d s t y l e = " t e x t - a l i g n : c e n t e r ; " > - - < / t d > \
< td style = "text-align: center;" > -- < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "urlWhite()" > 设置 < / a > < / t d > \
< / t r > \
< tr > \
< td > URL黑名单 < / t d > < t d > 禁 止 访 问 的 U R L 地 址 < / t d > < t d > < a c l a s s = " b t l i n k " o n c l i c k = " s e t R e q u e s t C o d e ( \ ' g e t \ ' , ' + r d a t a . g e t . s t a t u s + ' ) " > ' + r d a t a . g e t . s t a t u s + ' < / a > < / t d > \
< td style = "text-align: center;" > -- < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "urlBlack()" > 设置 < / a > < / t d > \
< / t r > \
< tr > \
< td > 其它 < / t d > < t d > ' + r d a t a . o t h e r . p s + ' < / t d > < t d > - - < / t d > \
< td style = "text-align: center;" > -- < / t d > \
< td class = "text-right" > < a class = "btlink" href = "javascript:;" onclick = "onlineEditFile(0,\''+rdata['reqfile_path']+'/other.html\')" > 响应内容 < / a > < / t d > \
< / t r > \
< / t b o d y > \
< / t a b l e > \
< / d i v > ' ;
con += ' < div style = "width:645px;margin-top:10px;" > < ul class = "help-info-text c7" > \
< li > 继承 : 全局设置将在站点配置中自动继承为默认值 < / l i > \
< li > 优先级 : IP白名单 > IP黑名单 > URL白名单 > URL黑名单 > CC防御 > 禁止国外IP访问 > User - Agent > URI过滤 > URL参数 > Cookie > POST < / l i > \
< / u l > < / d i v > ' ;
$ ( ".soft-man-con" ) . html ( con ) ;
} ) ;
}
//返回css
function back _css ( v ) {
if ( v > 0 ) {
return 'tipsval'
}
else {
return 'tipsval tipsvalnull'
}
}
//查看网站日志
function siteWafLog ( siteName ) {
var loadT = layer . msg ( '正在处理,请稍候..' , { icon : 16 , time : 0 } ) ;
owPost ( 'get_logs_list' , { siteName : siteName } , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = tmp . data ;
var selectLogDay = "" ;
var day = rdata [ 0 ] ;
for ( var i = 0 ; i < rdata . length ; i ++ ) {
selectLogDay += '<option value="' + rdata [ i ] + '">' + rdata [ i ] + '</option>' ;
}
if ( rdata == "" ) {
layer . msg ( "暂无日志记录" , { icon : 6 , shade : 0.3 , time : 1000 } ) ;
return
}
layer . open ( {
type : 1 ,
title : "日志【" + siteName + "】" ,
area : [ '880px' , '500px' ] ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < div class = "lib-box pd15 lib-box-log" > \
< div class = "lib-con-title" style = "height:40px" > < select id = "selectLogDay" class = "bt-input-text" onchange = "siteLogCon(\''+ siteName + '\',this.options[this.options.selectedIndex].value,1)" > ' + selectLogDay + ' < / s e l e c t > < / d i v > \
< div class = "lib-con" > \
< div class = "divtable" > \
< div id = "site_waf_log" style = "max-height:400px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none;" > \
< thead > < tr > < th width = "150" > 时间 < / t h > < t h w i d t h = " 1 2 0 " > 用 户 I P < / t h > < t h w i d t h = " 7 0 " > 类 型 < / t h > < t h > U R I 地 址 < / t h > < t h c l a s s = " t d h i d e " > U s e r - A g e n t < / t h > < t h w i d t h = " 6 0 " > 状 态 < / t h > < t h w i d t h = " 1 0 0 " > 过 滤 器 < / t h > < t h c l a s s = " t d h i d e " > 过 滤 规 则 < / t h > < t h w i d t h = " 1 0 0 " c l a s s = " t e x t - r i g h t " > 操 作 < / t h > < / t r > < / t h e a d > \
< tbody id = "LogDayCon" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< / d i v > \
< div class = "page pull-right" id = "size_log_page" style = "margin-top:10px" > < / d i v > \
< / d i v > \
< / d i v > '
} ) ;
siteLogCon ( siteName , day , 1 ) ;
tableFixed ( "site_waf_log" ) ;
} ) ;
}
//日志内容
function siteLogCon ( siteName , day , page ) {
if ( ! page ) page = 1 ;
var last = page - 1 ;
var next = page + 1 ;
var pagehtml = '' ;
$ ( "#site_waf_log" ) . scrollTop ( 0 ) ;
owPost ( 'get_safe_logs' , { siteName : siteName , toDate : day , p : page } , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
if ( ! tmp . status ) {
layer . msg ( rdata . msg , { icon : rdata . status ? 1 : 2 } ) ;
return ;
}
var rdata = tmp . data ;
var con = '' ;
for ( var i = 0 ; i < rdata . length ; i ++ ) {
con += ' < tr > \
< td class = "td0" > '+ escapeHTML(rdata[i][0]) + ' < / t d > \
< td class = "td1" > < a class = "btlink" href = "javascript:add_log_ip_black(\''+ escapeHTML(rdata[i][1]) + '\');" title = "加入黑名单" > ' + escapeHTML(rdata[i][1]) + ' < / a > < / t d > \
< td class = "td2" > '+ escapeHTML(rdata[i][2]) + ' < / t d > \
< td class = "td3" > < span class = "td3txt" > '+ escapeHTML(rdata[i][3]) + ' < / s p a n > < / t d > \
< td class = "tdhide td4" > '+ escapeHTML(rdata[i][4]) + ' < / t d > < t d > 已 拦 截 < / t d > \
< td class = "td5" > < span class = "filtertext" > '+ escapeHTML(rdata[i][5]) + ' < / s p a n > < / t d > \
< td class = "tdhide td6" > '+ escapeHTML(rdata[i][6]) + ' < / t d > \
< td class = "text-right" > < a href = "javascript:;" class = "btlink submit_msg" data - index = "'+ i +'" > 误报 < / a > | < a h r e f = " j a v a s c r i p t : ; " c l a s s = " b t l i n k b t w a f _ d e t a i l s " d a t a - i n d e x = " ' + i + ' " > 详 细 < / a > < / t d > \
< / t r > '
}
$ ( "#LogDayCon" ) . html ( con ) ;
pagehtml = '<a class="Pstart" onclick="site_log_con(\'' + siteName + '\',\'' + day + '\',1)">首页</a><a class="prevPage" onclick="site_log_con(\'' + siteName + '\',\'' + day + '\',' + last + ')">上一页</a><a class="nextPage" onclick="site_log_con(\'' + siteName + '\',\'' + day + '\',' + next + ')">下一页</a><a class="Pcount">第 ' + page + ' 页</a>' ;
$ ( "#size_log_page" ) . html ( pagehtml ) ;
if ( rdata . length < 1 ) $ ( ".nextPage" ) . hide ( ) ;
if ( last < 1 ) $ ( ".prevPage" ) . hide ( ) ;
// 发送误报请求
$ ( ".submit_msg" ) . click ( function ( ) {
var _this = $ ( this ) ;
var res = rdata [ $ ( this ) . attr ( 'data-index' ) ] ;
layer . confirm ( '是否确定提交误报反馈?' , { title : '误报反馈' , closeBtn : 2 , icon : 3 } , function ( ) {
var url _address = res [ 3 ] ;
var rule _arry = res [ 6 ] . split ( " >> " ) ;
var pdata = { url _rule : url _address } ;
var loadT = layer . msg ( '正在添加URL白名单..' , { icon : 16 , time : 0 } ) ;
$ . post ( '/plugin?action=a&name=btwaf&s=add_url_white' , pdata , function ( rdata ) {
layer . msg ( rdata . msg , { icon : rdata . status ? 1 : 2 } ) ;
layer . close ( loadT ) ;
if ( rule _arry [ 1 ] != undefined ) { $ . get ( 'https://www.bt.cn/Api/add_waf_logs?data=' + rule _arry [ 1 ] , function ( rdata ) { } , 'jsonp' ) }
} ) ;
} ) ;
} )
// 详情
$ ( ".btwaf_details" ) . click ( function ( ) {
var res = rdata [ $ ( this ) . attr ( 'data-index' ) ] ;
var time = res [ 0 ] ; //时间
var ip _address = res [ 1 ] ; //IP地址
var req _type = res [ 2 ] ; // 请求类型
var url _address = res [ 3 ] ; // 请求类型
var user _agent = res [ 4 ] ; // 请求类型
var filters = res [ 5 ] ; //过滤器
var filter _rule = '' ; //过滤规则
var rule _arry = res [ 6 ] . split ( " >> " ) ;
var incoming _value = '' , risk _value = '' ; //传入值,风险值
if ( rule _arry . length == 0 ) filter _rule = rule _arry [ 0 ]
incoming _value = rule _arry [ 1 ] == undefined ? '空' : rule _arry [ 1 ] ;
risk _value = incoming _value . match ( new RegExp ( rule _arry [ 0 ] . replace ( /\//g , '\\/' ) , 'i' ) ) ;
risk _value = risk _value ? risk _value [ 0 ] : '空' ;
layer . open ( {
type : 1 ,
title : time + "详情" ,
area : '600px' ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < div class = "pd15 lib-box" > \
< table class = "table" style = "border:#ddd 1px solid; margin-bottom:10px" > \
< tbody > < tr > < th > 时间 < / t h > < t d > ' + e s c a p e H T M L ( t i m e ) + ' < / t d > < t h > 用 户 I P < / t h > < t d > < a c l a s s = " b t l i n k " h r e f = " j a v a s c r i p t : a d d _ l o g _ i p _ b l a c k ( \ ' ' + e s c a p e H T M L ( i p _ a d d r e s s ) + ' \ ' ) " t i t l e = " 加 入 黑 名 单 " > ' + e s c a p e H T M L ( i p _ a d d r e s s ) + ' < / a > < / t d > < / t r > < t r > < t h > 类 型 < / t h > < t d > ' + e s c a p e H T M L ( r e q _ t y p e ) + ' < / t d > < t h > 过 滤 器 < / t h > < t d > ' + e s c a p e H T M L ( f i l t e r s ) + ' < / t d > < / t r > < / t b o d y > < / t a b l e > \
< div > < b style = "margin-left:10px" > URI地址 < / b > < / d i v > \
< div class = "lib-con pull-left mt10" > < div class = "divpre" > '+ escapeHTML(url_address) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > User - Agent < / b > < / d i v > \
< div class = "lib-con pull-left mt10" > < div class = "divpre" > '+ escapeHTML(user_agent) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > 过滤规则 < / b > < / d i v > \
< div class = "lib-con pull-left mt10" > < div class = "divpre" > '+ escapeHTML(rule_arry[0]) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > 传入值 < / b > < / d i v > \
< div class = "lib-con pull-left mt10" > < div class = "divpre" > '+ escapeHTML(incoming_value) + ' < / d i v > < / d i v > \
< div > < b style = "margin-left:10px" > 风险值 < / b > < / d i v > \
< div class = "lib-con pull-left mt10" > < div class = "divpre" > '+ escapeHTML(risk_value) + ' < / d i v > < / d i v > \
< / d i v > '
} )
} )
$ ( "#LogDayCon td" ) . click ( function ( ) {
$ ( this ) . parents ( "tr" ) . addClass ( "active" ) . siblings ( ) . removeClass ( "active" ) ;
} ) ;
} ) ;
}
function html _encode ( value ) {
return $ ( '<div></div>' ) . html ( value ) . text ( ) ;
}
function html _decode ( value ) {
return $ ( '<div></div>' ) . text ( value ) . html ( ) ;
}
//CDN-Header配置
function cdnHeader ( siteName , type ) {
if ( type == undefined ) {
create _l = layer . open ( {
type : 1 ,
title : "管理网站【" + siteName + "】CDN-Headers" ,
area : [ '500px' , '500px' ] ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < div class = "pd15" > \
< div style = "border-bottom:#ccc 1px solid;margin-bottom:10px;padding-bottom:10px" > \
< input class = "bt-input-text" name = "cdn_header_key" type = "text" value = "" style = "width:400px;margin-right:15px;margin-left:5px" placeholder = "header名称" > \
< button class = "btn btn-success btn-sm va0 pull-right" onclick = "addCdnHeader(\''+ siteName + '\');" > 添加 < / b u t t o n > \ < / d i v > \
< div class = "divtable" > \
< div id = "cdnHeader" style = "max-height:300px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none" > \
< thead > \
< tr > \
< th > header < / t h > \
< th style = "text-align: right;" > 操作 < / t h > \
< / t r > \
< / t h e a d > \
< tbody id = "cdn_header_con" class = "gztr" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > \
< li > 防火墙将尝试在以上header中获取客户IP < / l i > \
< / u l > < / d i v > '
} ) ;
tableFixed ( "cdnHeader" ) ;
}
owPost ( 'get_site_config_byname' , { siteName : siteName } , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var t1 = tmp . data ;
var rdata = t1 [ 'cdn_header' ] ;
var tbody = ''
for ( var i = 0 ; i < rdata . length ; i ++ ) {
tbody += ' < tr > \
< td > '+ rdata[i] + ' < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "removeCdnHeader(\''+ siteName + '\',\'' + rdata[i] + '\')" > 删除 < / a > < / t d > \
< / t r > '
}
$ ( "#cdn_header_con" ) . html ( tbody ) ;
} ) ;
}
//添加CDN-Header
function addCdnHeader ( siteName ) {
var pdata = {
cdn _header : $ ( "input[name='cdn_header_key']" ) . val ( ) ,
siteName : siteName
}
if ( pdata [ 'cdn_header' ] == '' ) {
layer . msg ( 'header不能为空' ) ;
$ ( "input[name='cdn_header_key']" ) . focus ( ) ;
return ;
}
owPost ( 'add_site_cdn_header' , pdata , function ( data ) {
var rdata = $ . parseJSON ( data ) ;
layer . msg ( rdata . msg , { icon : rdata . status ? 1 : 2 } ) ;
if ( rdata . status ) {
setTimeout ( function ( ) {
cdnHeader ( siteName , 1 ) ;
} , 1000 ) ;
}
} ) ;
}
//删除CDN-Header
function removeCdnHeader ( siteName , cdn _header _key ) {
owPost ( 'remove_site_cdn_header' , { siteName : siteName , cdn _header : cdn _header _key } , function ( data ) {
var rdata = $ . parseJSON ( data . data ) ;
layer . msg ( rdata . msg , { icon : rdata . status ? 1 : 2 } ) ;
if ( rdata . status ) {
setTimeout ( function ( ) {
cdnHeader ( siteName , 1 ) ;
} , 1000 ) ;
}
} ) ;
}
//网站规则设置
function setSiteObjConf ( siteName , ruleName , type ) {
if ( type == undefined ) {
create _l = layer . open ( {
type : 1 ,
title : "编辑网站【" + siteName + "】规则【" + ruleName + "】" ,
area : [ '700px' , '530px' ] ,
closeBtn : 2 ,
shadeClose : false ,
content : ' < div class = "pd15" > \
< div class = "divtable" > \
< div id = "SetSiteObjConf" class = "table_head_fix" style = "max-height:375px;overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover" style = "border:none" > \
< thead > \
< tr > \
< th width = "450" > 规则 < / t h > \
< th > 说明 < / t h > \
< th style = "text-align: right;" > 状态 < / t h > \
< / t r > \
< / t h e a d > \
< tbody id = "set_site_obj_conf_con" class = "gztr" > < / t b o d y > \
< / t a b l e > \
< / d i v > \
< / d i v > \
< ul class = "help-info-text c7 ptb10" > \
< li > 此处继承全局设置中已启用的规则 < / l i > \
< li > 此处的设置仅对当前站点有效 < / l i > \
< / u l > < / d i v > '
} ) ;
tableFixed ( "SetSiteObjConf" ) ;
}
getRuleByName ( ruleName , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = $ . parseJSON ( tmp . data ) ;
var tbody = '' ;
var tbody = '' ;
for ( var i = 0 ; i < rdata . length ; i ++ ) {
if ( rdata [ i ] [ 0 ] == - 1 ) continue ;
tbody += ' < tr > \
< td > '+ rdata[i][1] + ' < / t d > \
< td > '+ rdata[i][2] + ' < / t d > \
< td style = "text-align: right;" > \
< div class = "pull-right" > < input class = "btswitch btswitch-ios" id = "close_'+ i + '" type = "checkbox" ' + (rdata[i][0] ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "close_'+ i + '" style = "width:2em;height:1.2em;margin-bottom: 0" for = "closeua_' + i + '" onclick = "set_site_rule_state(\'' + siteName + '\',\'' + ruleName + '\',' + i + ')" > < / l a b e l > < / d i v > \
< / t d > \
< / t r > '
}
$ ( "#set_site_obj_conf_con" ) . html ( tbody )
} ) ;
}
//网站设置
function siteWafConfig ( siteName , type ) {
if ( type == undefined ) {
create _2 = layer . open ( {
type : 1 ,
title : "网站配置【" + siteName + "】" ,
area : [ '700px' , '500px' ] ,
closeBtn : 2 ,
shadeClose : false ,
content : '<div id="s_w_c"></div>'
} ) ;
}
owPost ( 'get_site_config_byname' , { siteName : siteName } , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = tmp . data ;
console . log ( rdata ) ;
nginx _config = rdata ;
var con = ' < div class = "pd15" > \
< div class = "lib-con-title" > \
< span > 网站防火墙开关 < / s p a n > \
< div class = "ssh-item" style = "margin-right:20px;" > \
< input class = "btswitch btswitch-ios" id = "closewaf_open" type = "checkbox" '+ (rdata.open ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closewaf_open" onclick = "set_site_obj_state(\''+ siteName + '\',\'open\')" style = "width:2.4em;height:1.4em;margin-bottom: 0" > < / l a b e l > \
< / d i v > \
< / d i v > \
< div class = "lib-con" > \
< div class = "divtable" > \
< table class = "table table-hover waftable" > \
< thead > \
< tr > \
< th > 名称 < / t h > \
< th > 描述 < / t h > \
< th width = "80" > 状态 < / t h > \
< th style = "text-align: right;" > 操作 < / t h > \
< / t r > \
< / t h e a d > \
< tbody > \
< tr > \
< td > CC防御 < / t d > \
< td > < font style = "color:red;" > '+ rdata.cc.cycle + ' < / f o n t > 秒 内 , 请 求 同 一 U R I 累 计 超 过 < f o n t s t y l e = " c o l o r : r e d ; " > ' + r d a t a . c c . l i m i t + ' < / f o n t > 次 , 封 锁 I P < f o n t s t y l e = " c o l o r : r e d ; " > ' + r d a t a . c c . e n d t i m e + ' < / f o n t > 秒 < / t d > \
< td > \
< div class = "ssh-item" style = "margin-left:0" > \
< input class = "btswitch btswitch-ios" id = "closecc" type = "checkbox" '+ (rdata.cc.open ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closecc" onclick = "set_site_obj_state(\''+ siteName + '\',\'cc\')" > < / l a b e l > \
< / d i v > \
< / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "setCcRule('+ rdata.cc.cycle + ',' + rdata.cc.limit + ',' + rdata.cc.endtime + ',\'' + siteName + '\',' + rdata.cc.increase + ')" > 设置 < / a > < / t d > \
< / t r > \
< tr > \
< td > 恶意容忍设置 < / t d > \
< td > < font style = "color:red;" > '+ rdata.retry.retry_cycle + ' < / f o n t > 秒 内 , 累 计 超 过 < f o n t s t y l e = " c o l o r : r e d ; " > ' + r d a t a . r e t r y . r e t r y + ' < / f o n t > 次 恶 意 请 求 , 封 锁 I P < f o n t s t y l e = " c o l o r : r e d ; " > ' + r d a t a . r e t r y . r e t r y _ t i m e + ' < / f o n t > 秒 < / t d > \
< td style = "text-align: left;" > & nbsp ; & nbsp ; -- < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "setRetry('+ rdata.retry.retry_cycle + ',' + rdata.retry.retry + ',' + rdata.retry.retry_time + ',\'' + siteName + '\')" > 设置 < / a > < / t d > \
< / t r > \
< tr > \
< td > GET - URI过滤 < / t d > \
< td > '+ rdata.get.ps + ' < / t d > \
< td > \
< div class = "ssh-item" style = "margin-left:0" > \
< input class = "btswitch btswitch-ios" id = "closeget" type = "checkbox" '+ (rdata.get ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closeget" onclick = "set_site_obj_state(\''+ siteName + '\',\'get\')" > < / l a b e l > \
< / d i v > \
< / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "setSiteObjConf(\''+ siteName + '\',\'url\')" > 规则 < / a > < / t d > \
< / t r > \
< td > GET - 参数过滤 < / t d > \
< td > '+ rdata.get.ps + ' < / t d > \
< td > \
< div class = "ssh-item" style = "margin-left:0" > \
< input class = "btswitch btswitch-ios" id = "closeargs" type = "checkbox" '+ (rdata.get ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closeargs" onclick = "set_site_obj_state(\''+ siteName + '\',\'get\')" > < / l a b e l > \
< / d i v > \
< / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "set_site_obj_conf(\''+ siteName + '\',\'args\')" > 规则 < / a > < / t d > \
< / t r > \
< tr > \
< td > POST过滤 < / t d > \
< td > '+ rdata.post.ps + ' < / t d > \
< td > \
< div class = "ssh-item" style = "margin-left:0" > \
< input class = "btswitch btswitch-ios" id = "closepost" type = "checkbox" '+ (rdata.post ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closepost" onclick = "set_site_obj_state(\''+ siteName + '\',\'post\')" > < / l a b e l > \
< / d i v > \
< / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "set_site_obj_conf(\''+ siteName + '\',\'post\')" > 规则 < / a > < / t d > \
< / t r > \
< tr > \
< td > User - Agent过滤 < / t d > \
< td > '+ rdata[' user - agent '].ps + ' < / t d > \
< td > \
< div class = "ssh-item" style = "margin-left:0" > \
< input class = "btswitch btswitch-ios" id = "closeua" type = "checkbox" '+ (rdata[' user - agent '] ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closeua" onclick = "set_site_obj_state(\''+ siteName + '\',\'user-agent\')" > < / l a b e l > \
< / d i v > \
< / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "set_site_obj_conf(\''+ siteName + '\',\'user_agent\')" > 规则 < / a > < / t d > \
< / t r > \
< tr > \
< td > Cookie过滤 < / t d > \
< td > '+ rdata.cookie.ps + ' < / t d > \
< td > \
< div class = "ssh-item" style = "margin-left:0" > \
< input class = "btswitch btswitch-ios" id = "closecookie" type = "checkbox" '+ (rdata.cookie ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closecookie" onclick = "set_site_obj_state(\''+ siteName + '\',\'cookie\')" > < / l a b e l > \
< / d i v > \
< / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "set_site_obj_conf(\''+ siteName + '\',\'cookie\')" > 规则 < / a > < / t d > \
< / t r > \
< tr > \
< td > 常见扫描器 < / t d > < t d > ' + r d a t a . s c a n . p s + ' < / t d > \
< td > \
< div class = "ssh-item" style = "margin-left:0" > \
< input class = "btswitch btswitch-ios" id = "closescan" type = "checkbox" '+ (rdata.scan ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closescan" onclick = "set_site_obj_state(\''+ siteName + '\',\'scan\')" > < / l a b e l > \
< / d i v > \
< / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "scanRule()" > 设置 < / a > < / t d > \
< / t r > \
< tr > \
< td > 使用CDN < / t d > \
< td > 该站点使用了CDN , 启用后方可正确获取客户IP < / t d > \
< td > \
< div class = "ssh-item" style = "margin-left:0" > \
< input class = "btswitch btswitch-ios" id = "closecdn" type = "checkbox" '+ (rdata.cdn ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closecdn" onclick = "set_site_obj_state(\''+ siteName + '\',\'cdn\')" > < / l a b e l > \
< / d i v > \
< / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "cdnHeader(\''+ siteName + '\')" > 设置 < / a > < / t d > \
< / t r > \
< tr > \
< td > 禁止扩展名 < / t d > \
< td > 禁止访问指定扩展名 < / t d > \
< td style = "text-align: left;" > & nbsp ; & nbsp ; -- < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "site_rule_admin(\''+ siteName + '\',\'disable_ext\')" > 设置 < / a > < / t d > \
< / t r > \
< tr > \
< td > 禁止上传的文件类型 < / t d > \
< td > 禁止上传指定的文件类型 < / t d > \
< td style = "text-align: left;" > & nbsp ; & nbsp ; -- < / t d > \
< td class = "text-right" > < a class = "btlink" onclick = "site_rule_admin(\''+ siteName + '\',\'disable_upload_ext\')" > 设置 < / a > < / t d > \
< / t r > \
< / t b o d y > \
< / t a b l e > \
< / d i v > \
< / d i v > \
< ul class = "help-info-text c7" > \
< li > 注意 : 此处大部分配置 , 仅对当前站点有效 ! < / l i > \
< / u l > \
< / d i v > ' ;
$ ( "#s_w_c" ) . html ( con ) ;
} ) ;
}
function wafSite ( ) {
owPost ( 'get_site_config' , { } , function ( data ) {
var tmp = $ . parseJSON ( data . data ) ;
var rdata = $ . parseJSON ( tmp . data ) ;
console . log ( rdata ) ;
var tbody = '' ;
var i = 0 ;
$ . each ( rdata , function ( k , v ) {
console . log ( k , v ) ;
i += 1 ;
tbody += ' < tr > \
< td > < a onclick = "siteWafConfig(\''+ k + '\')" class = "sitename btlink" title = "' + k + '" > ' + k + ' < / a > < / t d > \
< td > \
< input onclick = "set_site_obj_state(\''+ k + '\',\'get\')" type = "checkbox" ' + (v.get ? ' checked ' : ' ') + ' > < span class = "' + back_css(v.total[1].value) + '" title = "拦截GET渗透次数:' + v.total[1].value + '" > ' + v.total[1].value + ' < / s p a n > \
< / t d > \
< td > \
< input onclick = "set_site_obj_state(\''+ k + '\',\'post\')" type = "checkbox" ' + (v.post ? ' checked ' : ' ') + ' > < span class = "' + back_css(v.total[0].value) + '" title = "拦截POST渗透次数:' + v.total[0].value + '" > ' + v.total[0].value + ' < / s p a n > \
< / t d > \
< td > \
< input onclick = "set_site_obj_state(\''+ k + '\',\'user-agent\')" type = "checkbox" ' + (v[' user - agent '] ? ' checked ' : ' ') + ' > < span class = "' + back_css(v.total[3].value) + '" title = "拦截恶意User-Agent次数:' + v.total[3].value + '" > ' + v.total[3].value + ' < / s p a n > \
< / t d > \
< td > \
< input onclick = "set_site_obj_state(\''+ k + '\',\'cookie\')" type = "checkbox" ' + (v.cookie ? ' checked ' : ' ') + ' > < span class = "' + back_css(v.total[4].value) + '" title = "拦截Cookie渗透次数:' + v.total[4].value + '" > ' + v.total[4].value + ' < / s p a n > \
< / t d > \
< td > \
< input onclick = "set_site_obj_state(\''+ k + '\',\'cdn\')" type = "checkbox" ' + (v.cdn ? ' checked ' : ' ') + ' > \
< / t d > \
< td > \
< input onclick = "set_site_obj_state(\''+ k + '\',\'cc\')" type = "checkbox" ' + (v.cc.open ? ' checked ' : ' ') + ' > < span class = "' + back_css(v.total[2].value) + '" title = "拦截CC攻击次数:' + v.total[2].value + '" > ' + v.total[2].value + ' < / s p a n > \
< / t d > \
< td > \
< div class = "ssh-item" style = "margin-left:0" > \
< input class = "btswitch btswitch-ios" id = "closeget_'+ i + '" type = "checkbox" ' + (v.open ? ' checked ' : ' ') + ' > \
< label class = "btswitch-btn" for = "closeget_'+ i + '" onclick = "set_site_obj_state(\'' + k + '\',\'open\')" > < / l a b e l > \
< / d i v > \
< / t d > \
< td class = "text-right" > < a onclick = "siteWafLog(\''+ k + '\')" class = "btlink ' + (v.log_size > 0 ? 'dot' : '') + '" > 日志 < / a > | < a o n c l i c k = " s i t e W a f C o n f i g ( \ ' ' + k + ' \ ' ) " c l a s s = " b t l i n k " > 设 置 < / a > < / t d > \
< / t r > '
} ) ;
var con = ' < div class = "lib-box" > \
< div class = "lib-con" > \
< div class = "divtable" > \
< div id = "siteCon_fix" style = "max-height:580px; overflow:auto;border:#ddd 1px solid" > \
< table class = "table table-hover waftable" style = "border:none" > \
< thead > \
< tr > \
< th > 站点 < / t h > \
< th > GET < / t h > \
< th > POST < / t h > \
< th > UA < / t h > \
< th > Cookie < / t h > \
< th title = "这个网站使用了CDN或其它代理时请勾选" > CDN < / t h > \
< th > CC防御 < / t h > \
< th > 状态 < / t h > \
< th style = "text-align: right;" > 操作 < / t h > \
< / t r > \
< / t h e a d > \
< tbody > '+ tbody + ' < / t b o d y > \
< / t a b l e > \
< / d i v > \
< / d i v > \
< / d i v > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( con ) ;
tableFixed ( "siteCon_fix" ) ;
} ) ;
}
function wafHistory ( ) {
var con = '<button class="btn btn-success btn-sm" onclick="UncoverAll()">解封所有</button>' ;
con += ' < div class = "divtable mt10" > \
< table class = "table table-hover waftable" style = "color:#fff;" > \
< thead > < tr > < th width = "18%" > 开始时间 < / t h > \
< th width = "44%" > IP < / t h > \
< th width = "10%" > 站点 < / t h > \
< th width = "10%" > 封锁原因 < / t h > \
< th width = "10%" > 封锁时长 < / t h > \
< th style = "text-align: center;" width = "10%" > 状态 < / t h > \
< / t h e a d > \
< / t a b l e > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( con ) ;
}
function wafLogs ( ) {
var con = ' < div class = "divtable" > \
< table class = "table table-hover waftable" style = "color:#fff;" > \
< thead > < tr > < th width = "18%" > 名称 < / t h > \
< th width = "44%" > 描述 < / t h > \
< th width = "10%" > 响应 < / t h > \
< th style = "text-align: center;" width = "10%" > 状态 < / t h > \
< th style = "text-align: right;" > 操作 < / t h > < / t r > \
< / t h e a d > \
< / t a b l e > \
< / d i v > ' ;
$ ( ".soft-man-con" ) . html ( con ) ;
}