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 owPostN(method, args, callback){ $.post('/plugins/run', {name:'op_waf', func:method, args:JSON.stringify(args)}, function(data) { 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: 1, shadeClose: true, content: '
\
\ 响应代码\
\ \
\
\
\ \
\
' }); } 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){ showMsg(rdata.msg, function(){ wafGloabl(); },{icon:1,time:2000,shade: [0.3, '#000']},2000); } else { layer.msg('设置失败!',{icon:0,time:2000,shade: [0.3, '#000']}); } }); } //保存CC规则 function saveCcRule(siteName,is_open_global, type) { var increase = "0"; if(type == 2){ // set_aicc_open('start'); increase = "0"; } else { // set_aicc_open('stop'); increase = type; } increase = "0"; var pdata = { siteName:siteName, cycle: $("input[name='cc_cycle']").val(), limit: $("input[name='cc_limit']").val(), endtime: $("input[name='cc_endtime']").val(), is_open_global:is_open_global, increase:increase } console.log(pdata); var act = 'set_cc_conf'; if (siteName != 'undefined') act = 'set_site_cc_conf'; owPost(act, pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); setTimeout(function(){ if (siteName != 'undefined') { siteWafConfig(siteName, 1); } else { wafGloabl(); } },1000); }); } function setCcRule(cycle, limit, endtime, siteName, increase){ var incstr = '
  • 此处设置仅对当前站点有效。
  • '; if (siteName == 'undefined') { incstr = '
  • 此处设置的是初始值,新添加站点时将继承,对现有站点无效。
  • '; } //
    \ // 增强模式\ //
    \ // \ //
    \ //
    \ //
    \ // 四层防御\ //
    \ // \ //
    \ //
    \ //
  • 增强模式:CC防御加强版,开启后可能会影响用户体验,建议在用户受到CC攻击时开启。
  • \ create_l = layer.open({ type: 1, title: "设置CC规则", area: '540px', closeBtn: 1, shadeClose: false, content: '
    \
    \ 周期\
    \
    \
    \ 频率\
    \
    \
    \ 封锁时间\
    \
    \ \
    \ \ \
    \
    ', success:function(layero,index){ $('.btn_cc_all').click(function(){ saveCcRule(siteName,1,$('[name="enhance_mode"]').val()); }); $('.btn_cc_present').click(function(){ saveCcRule(siteName,0,$('[name="enhance_mode"]').val()); }); } }); } //设置retry规则 function setRetry(retry_cycle, retry, retry_time, siteName) { create_layer = layer.open({ type: 1, title: "设置恶意容忍规则", area: '500px', closeBtn: 1, shadeClose: false, content: '
    \
    \ 周期\
    \
    \
    \ 频率\
    \
    \
    \ 封锁时间\
    \
    \ \
    \ \ \
    \
    ', success:function(){ $('.btn_retry_all').click(function(){ saveRetry(siteName,1); }); $('.btn_retry_present').click(function(){ saveRetry(siteName,0); }); } }); } //设置safe_verify规则 function setSafeVerify(auto, cpu, time, mode,siteName) { var svlayer = layer.open({ type: 1, title: "设置强制安全验证", area: '500px', closeBtn: 1, shadeClose: false, content: '
    \
    \ CPU\
    %
    \
    \
    \ 通行时间\
    \ 秒\
    \
    \
    \ 验证模式\
    \ \
    \
    \
    \ 开启自动\
    \ \
    \
    \ \
    \ \
    \
    ', success:function(index){ $('.btn_sv_present').click(function(){ var pdata = { siteName: siteName, cpu: $("input[name='cpu']").val(), auto: $("select[name='auto']").val(), mode: $("select[name='mode']").val(), time: $("input[name='time']").val(), } var act = 'set_safe_verify'; owPost(act, pdata, function(data){ var rdata = $.parseJSON(data.data); showMsg(rdata.msg, function() { layer.close(svlayer); wafGloabl(); },{ icon: rdata.status ? 1 : 2 },1000); }); }); }, }); } //保存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); }); } function addRule(ruleName) { var pdata = { 'ruleValue': $("input[name='ruleValue']").val(), 'ps': $("input[name='rulePs']").val(), 'ruleName': ruleName } owPost('add_rule', pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if (rdata.status) { setTimeout(function(){ setObjConf(ruleName, 1); },1000); } }); } function modifyRule(index, ruleName) { var ruleValue = $('.rule_body_' + index).text(); $('.rule_body_' + index).html(''); var rulePs = $('.rule_ps_' + index).text(); $('.rule_ps_' + index).html(''); $('.rule_modify_' + index).html('保存 | 取消'); $(".modr_cancel_" + index).click(function () { $('.rule_body_' + index).html(ruleValue); $('.rule_ps_' + index).html(rulePs); $('.rule_modify_' + index).html('编辑'); }) } function modifyRuleSave(index, ruleName) { var pdata = { index: index, ruleName: ruleName, ruleBody: $("textarea[name='rule_body_" + index + "']").val(), rulePs: $("input[name='rule_ps_" + index + "']").val() } owPost('modify_rule', pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if (rdata.status) { setTimeout(function(){ setObjConf(ruleName, 1); },1000); } }); } function removeRule(ruleName, index) { var pdata = { 'index': index, 'ruleName': ruleName } safeMessage('删除规则', '您真的要删除这条过滤规则吗?', function () { owPost('remove_rule', pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if (rdata.status) { setTimeout(function(){ setObjConf(ruleName, 1); },1000); } }); }); } function setRuleState(ruleName, index) { var pdata = { 'index': index, 'ruleName': ruleName } owPost('set_rule_state', pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if (rdata.status) { setTimeout(function(){ setObjConf(ruleName, 1); },1000); } }); } //设置规则 function setObjConf(ruleName, type) { if (type == undefined) { create_l = layer.open({ type: 1, title: "编辑规则【" + ruleName + "】", area: ['700px', '530px'], closeBtn: 1, shadeClose: false, content: '
    \
    \ \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \ \ \
    规则说明操作状态
    \
    \
    \
    ' }); 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 = ' | 删除'; tbody += '\ ' + rdata[i][1] + '\ ' + rdata[i][2] + '\ 编辑' + removeRule + '\ \
    \ \ \
    \ \ ' } $("#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: 1, shadeClose: false, content: '
    \
    \ Header\
    \
    \
    \ Cookie\
    \
    \
    \ Args\
    \
    \ \
    \ \
    \
    ' }); }); } //保存扫描器规则 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段到IP白名单 function addIpWhite() { var pdata = { start_ip: $("input[name='start_ip']").val(), end_ip: $("input[name='end_ip']").val() } if (pdata['start_ip'].split('.').length < 4 || pdata['end_ip'].split('.').length < 4) { layer.msg('起始IP或结束IP格式不正确!'); return; } owPost('add_ip_white', pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if (rdata.status) { setTimeout(function(){ ipWhite(1); },1000); } }); } //从IP白名单删除IP段 function removeIpWhite(index) { owPost('remove_ip_white', { index: index }, function(data){ var rdata = $.parseJSON(data.data); if (rdata.status) { setTimeout(function(){ ipWhite(1); },1000); } layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); } function funDownload(content, filename) { // 创建隐藏的可下载链接 var eleLink = document.createElement('a'); eleLink.download = filename; eleLink.style.display = 'none'; // 字符内容转变成blob地址 var blob = new Blob([content]); eleLink.href = URL.createObjectURL(blob); // 触发点击 document.body.appendChild(eleLink); eleLink.click(); // 然后移除 document.body.removeChild(eleLink); } function outputLayer(rdata, name, type) { window.Load_layer = layer.open({ type: 1, title: type ? "导出数据" : "导入数据", area: ['400px', '370px'], shadeClose: false, content: '
    ' + '
    ' + '
    ' + '' + '
    导入格式如下:' + (name == 'ip_white' || name == 'ip_black' ? "[[[127, 0, 0, 1],[127, 0, 0, 255]],[[192, 0, 0, 1],[192, 0, 0, 255]]]" : "[\"^/test\",\"^/web\"]") + '
    ' + '
    ' + '
    ' + '
    ' + (type ? '' : '') + '
    ' + '
    ', }); var lead_error = CodeMirror.fromTextArea(document.getElementById("lead_data"), { mode: 'html', matchBrackets: true, matchtags: true, autoMatchParens: true }); setTimeout(function () { $('.btn_save').on('click', function () { importData(name, lead_error.getValue(), function(){ layer.close(window.Load_layer); ipWhiteLoadList(); }); }) $('.btn_save_to').on('click', function () { funDownload(lead_error.getValue(), name + '.json'); }); $('#focus_tips').on('click', function () { $('.placeholder').hide(); }); }, 100); } //导出数据 function outputData(name, callback) { var loadT = layer.msg('正在导出数据..', { icon: 16, time: 0 }); owPost('output_data', { sname: name } , function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); if (callback) callback(rdata,res); outputLayer(rdata, name, true); }); } //导入数据 function importData(name, pdata, callback) { owPost('import_data', { sname: name, pdata: pdata } , function(data){ var rdata = $.parseJSON(data.data); if (callback) callback(); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); } function fileInput(name) { outputLayer('', name, false); } function ipWhiteLoadList(){ 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 += '\ '+ rdata[i][0].join('.') + '\ '+ rdata[i][1].join('.') + '\ 删除\ ' } $("#ip_white_con").html(tbody); }); } //IP白名单 function ipWhite(type) { if (type == undefined) { create_l = layer.open({ type: 1, title: "管理IP白名单", area: ['500px', '500px'], closeBtn: 1, shadeClose: false, content: '
    \
    \ \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \ \
    超始IP结束IP操作
    \
    \
    \
    \ \ \
    \ \
    \
    \
    ', 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(); // } // }); //
    IPv4白名单
    IPv6白名单
    \ } }); tableFixed("ipWhite"); } ipWhiteLoadList(); } //IP白名单 function urlWhite(type) { var ruleName = "url_white"; if (type == undefined) { create_l = layer.open({ type: 1, title: "管理URL白名单", area: ['700px', '530px'], closeBtn: 1, shadeClose: false, content: '
    \
    \ \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \ \ \
    规则说明操作状态
    \
    \
    \
    ' }); tableFixed("jc-file-table"); } getRuleByName(ruleName, 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++) { var removeRule = '' if (rdata[i][3] != 0) removeRule = ' | 删除'; tbody += '\ ' + rdata[i][1] + '\ ' + rdata[i][2] + '\ 编辑' + removeRule + '\ \
    \ \ \
    \ \ ' } $("#set_obj_conf_con").html(tbody); }); } // 获取IPV4黑名单 function getIpv4Address(callback){ getRuleByName('ip_black', function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); callback(rdata); }); } // 获取IPV6黑名单 function getIpv6Address(callback){ getRuleByName('ipv6_black', function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); callback(rdata); }); } // 添加ipv6请求 function addIpv6Req(ip,callback){ var ip = ip.replace(/:/g, '_'); owPost('set_ipv6_black', {addr:ip}, function(data){ var rdata = $.parseJSON(data.data); if(callback) callback(rdata); }); } // 添加ipv6请求 function removeIpv6Black(ip,callback){ var ip = ip.replace(/:/g, '_'); owPost('del_ipv6_black', {addr:ip}, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg,{icon:rdata.status?1:2}); $('.tab_list .tab_block:eq(1)').click(); if(callback) callback(rdata); }); } //添加IP段到IP黑名单 function addIpBlack() { var pdata = { start_ip: $("input[name='start_ip']").val(), end_ip: $("input[name='end_ip']").val() } if (pdata['start_ip'].split('.').length < 4 || pdata['end_ip'].split('.').length < 4) { layer.msg('起始IP或结束IP格式不正确!'); return; } owPost('add_ip_black', pdata, function(data){ var rdata = $.parseJSON(data.data); if (rdata.status) { ipBlack(1); } layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); } function addIpBlackArgs(ip) { var pdata = { start_ip: ip, end_ip: ip, } if (pdata['start_ip'].split('.').length < 4 || pdata['end_ip'].split('.').length < 4) { layer.msg('起始IP或结束IP格式不正确!'); return; } owPost('add_ip_black', pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); } //从IP黑名单删除IP段 function removeIpBlack(index) { owPost('remove_ip_black', { index: index }, function (data) { var rdata = $.parseJSON(data.data); if (rdata.status) { ipBlack(1); } layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); } //IP黑名单 function ipBlack(type) { if (type == undefined) { create_l = layer.open({ type: 1, title: "管理IP黑名单", area: ['500px', '500px'], closeBtn: 1, shadeClose: false, content: '
    IPv4黑名单
    IPv6黑名单
    \
    \
    \ \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \ \
    超始IP结束IP操作
    \
    \
    \ \ \
    \
    \ \
    \
    \
    \ \ \
    \
    \
    \ \ \ \
    IPv6地址操作
    \
    \
    \ \
    ', 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(); getIpv4Address(function(rdata){ var tbody = '' for (var i = 0; i < rdata.length; i++) { tbody += '\ '+ rdata[i][0].join('.') + '\ '+ rdata[i][1].join('.') + '\ 删除\ ' } $("#ip_black_con").html(tbody); }); }else{ $('.ipv4_block').hide().next().show(); getIpv6Address(function(res){ var tbody = '',rdata = res; for (var i = 0; i < rdata.length; i++) { tbody += '\ '+ rdata[i] + '\ 删除\ ' } $("#ipv6_black_con").html(tbody); }); } }); $('.btn_add_ipv6').click(function(){ var ipv6 = $('[name="ipv6_address"]').val(); addIpv6Req(ipv6, function(res){ 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"); } else { $('.tab_list .tab_block:eq(0)').click(); } } function wafScreen(){ owPost('waf_srceen', {}, function(data){ var rdata = $.parseJSON(data.data); var end_time = Date.now(); var cos_time = (end_time/1000) - parseInt(rdata['start_time']); var cos_day = parseInt(parseInt(cos_time)/86400); var con = '
    总拦截'+rdata.total+'
    '; con += '
    安全防护'+cos_day+'
    '; con += '
    \
    POST渗透'+rdata.rules.post+'
    \
    GET渗透'+rdata.rules.args+'
    \
    CC攻击'+rdata.rules.cc+'
    \
    恶意User-Agent'+rdata.rules.user_agent+'
    \
    Cookie渗透'+rdata.rules.cookie+'
    \
    恶意扫描'+rdata.rules.scan+'
    \
    恶意HEAD请求0
    \
    URI自定义拦截'+rdata.rules.url+'
    \
    URI保护'+rdata.rules.args+'
    \
    恶意文件上传'+rdata.rules.upload_ext+'
    \
    禁止的扩展名'+rdata.rules.path+'
    \
    禁止PHP脚本'+rdata.rules.php_path+'
    \
    '; con += '
    '; $(".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 = '
    \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
    名称描述响应状态操作
    CC防御防御CC攻击,具体防御参数请到站点配置中调整'+rdata.cc.status+'
    \ \
    \
    初始规则
    恶意容忍度封锁连续恶意请求,请到站点配置中调整容忍阈值' + rdata.cc.status + '--初始规则
    强制安全验证'+rdata.safe_verify.ps+'--
    \ \
    \
    设置 | 响应内容
    GET-URI过滤'+ rdata.get.ps + '' + rdata.get.status + '
    \ \ \
    规则 | 响应内容
    GET-参数过滤'+ rdata.get.ps + '' + rdata.get.status + '
    \ \ \
    规则 | 响应内容
    POST过滤'+ rdata.post.ps + '' + rdata.post.status + '
    \ \ \
    规则 | 响应内容
    User-Agent过滤'+ rdata['user-agent'].ps + '' + rdata['user-agent'].status + '
    \ \ \
    规则 | 响应内容
    Cookie过滤'+ rdata.cookie.ps + '' + rdata.cookie.status + '
    \ \ \
    规则 | 响应内容
    常见扫描器'+ rdata.scan.ps + '' + rdata.scan.status + '
    \ \ \
    设置
    URL白名单所有规则对URL白名单无效----设置
    IP白名单所有规则对IP白名单无效----设置
    IP黑名单禁止访问的IP' + rdata.cc.status + '--设置
    其它'+ rdata.other.ps + '----响应内容
    \
    '; con += '
    '; $(".soft-man-con").html(con); }); } //返回css function back_css(v) { if (v > 0) { return 'tipsval' } else { return 'tipsval tipsvalnull' } } function html_encode(value) { return $('
    ').html(value).text(); } function html_decode(value) { return $('
    ').text(value).html(); } //添加站点过滤规则 function addSiteRule(siteName, ruleName) { var pdata = { ruleValue: $("input[name='site_rule_value']").val(), siteName: siteName, ruleName: ruleName } if (pdata['ruleValue'] == '') { layer.msg('过滤规则不能为空'); $("input[name='site_rule_value']").focus(); return; } owPost('add_site_rule', pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if (rdata.status) { setTimeout(function(){ siteRuleAdmin(siteName, ruleName, 1); },1000); } }); } //删除站点过滤规则 function removeSiteRule(siteName, ruleName, index) { var pdata = { index: index, siteName: siteName, ruleName: ruleName } owPost('remove_site_rule', pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if (rdata.status) { if (ruleName == 'url_tell') { site_url_tell(siteName, 1); return; } if (ruleName == 'url_rule') { site_url_rule(siteName, 1); return; } setTimeout(function(){ siteRuleAdmin(siteName, ruleName, 1); },1000); } }); } //网站规则管理 function siteRuleAdmin(siteName, ruleName, type) { var placeho = ''; var ps = ''; var title = ''; switch (ruleName) { case 'disable_php_path': placeho = 'URI地址,支持正则表达式'; ps = '
  • 此处请不要包含URI参数,一般针对目录URL,示例:/admin
  • ' title = '禁止运行PHP的URL地址' break; case 'disable_path': placeho = 'URI地址,支持正则表达式'; ps = '
  • 此处请不要包含URI参数,一般针对目录URL,示例:/admin
  • ' title = '禁止访问的URL地址' break; case 'disable_ext': placeho = '扩展名,不包含点(.),示例:sql'; ps = '
  • 直接填要被禁止访问的扩展名,如我希望禁止访问*.sql文件:sql
  • ' title = '禁止访问的扩展名' break; case 'disable_upload_ext': placeho = '扩展名,不包含点(.),示例:sql'; ps = '
  • 直接填要被禁止访问的扩展名,如我希望禁止上传*.php文件:php
  • ' title = '禁止上传的文件类型' break; } if (type == undefined) { create_l = layer.open({ type: 1, title: "管理网站过滤规则【" + title + "】", area: ['500px', '500px'], closeBtn: 1, shadeClose: false, content: '
    \
    \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \
    规则操作
    \
    \
    \
    ' }); tableFixed("siteRuleAdmin"); } owPost('get_site_rule', { siteName: siteName, ruleName: ruleName }, function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); var tbody = '' for (var i = 0; i < rdata.length; i++) { tbody += '\ '+ rdata[i] + '\ 删除\ ' } $("#site_rule_admin_con").html(tbody); }); } //CDN-Header配置 function cdnHeader(siteName, type) { if (type == undefined) { create_l = layer.open({ type: 1, title: "管理网站【" + siteName + "】CDN-Headers", area: ['500px', '500px'], closeBtn: 1, shadeClose: false, content: '
    \
    \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \
    header操作
    \
    \
    \
    ' }); 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 += '\ '+ rdata[i] + '\ 删除\ ' } $("#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 setSiteObjState(siteName, obj) { // var loadT = layer.msg('正在处理,请稍候..', { icon: 16, time: 0 }); owPost('set_site_obj_open', { siteName: siteName, obj: obj } , function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); setTimeout(function(){ siteWafConfig(siteName, 1); // siteConfig(); },1000); }); // $.post('/plugin?action=a&name=btwaf&s=set_site_obj_open', { siteName: siteName, obj: obj }, function (rdata) { // layer.close(loadT); // site_waf_config(siteName, 1); // siteconfig(); // layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); // }); } //网站规则设置 function setSiteObjConf(siteName, ruleName, type) { if (type == undefined) { create_l = layer.open({ type: 1, title: "编辑网站【" + siteName + "】规则【" + ruleName + "】", area: ['700px', '530px'], closeBtn: 1, shadeClose: false, content: '
    \
    \
    \ \ \ \ \ \ \ \ \ \
    规则说明状态
    \
    \
    \
    ' }); 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 += '\ '+ rdata[i][1] + '\ '+ rdata[i][2] + '\ \
    \
    \ \ ' } $("#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: 1, shadeClose: false, content: '
    ' }); } owPost('get_site_config_byname', { siteName: siteName }, function(data){ var tmp = $.parseJSON(data.data); var rdata = tmp.data; nginx_config = rdata; var con = '
    \
    \ 网站防火墙开关\
    \ \ \
    \
    \
    \
    \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
    名称描述状态操作
    CC防御'+ rdata.cc.cycle + ' 秒内,请求同一URI累计超过 ' + rdata.cc.limit + ' 次,封锁IP ' + rdata.cc.endtime + '\
    \ \ \
    \
    设置
    恶意容忍设置'+ rdata.retry.retry_cycle + ' 秒内,累计超过 ' + rdata.retry.retry + ' 次恶意请求,封锁IP ' + rdata.retry.retry_time + '  --设置
    GET-URI过滤'+ rdata.get.ps + '\
    \ \ \
    \
    规则
    GET-参数过滤'+ rdata.get.ps + '\
    \ \ \
    \
    规则
    POST过滤'+ rdata.post.ps + '\
    \ \ \
    \
    规则
    User-Agent过滤'+ rdata['user-agent'].ps + '\
    \ \ \
    \
    规则
    Cookie过滤'+ rdata.cookie.ps + '\
    \ \ \
    \
    规则
    常见扫描器'+ rdata.scan.ps + '\
    \ \ \
    \
    设置
    使用CDN该站点使用了CDN,启用后方可正确获取客户IP\
    \ \ \
    \
    设置
    禁止扩展名禁止访问指定扩展名  --设置
    禁止上传的文件类型禁止上传指定的文件类型  --设置
    \
    \
    \ \
    '; $("#s_w_c").html(con); }); } function wafSite(){ owPost('get_site_config', {}, function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); var tbody = ''; var i = 0; $.each(rdata, function (k, v) { i += 1; tbody += '\ ' + k + '\ ' + v.total[1].value + '\ ' + v.total[0].value + '\ ' + v.total[3].value + '\ ' + v.total[4].value + '\ \ ' + v.total[2].value + '\ \
    \ \ \
    \ \ 日志 \ '; //| 设置 }); var con = '
    \
    \
    \
    \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ '+ tbody + '\
    站点GETPOSTUACookieCDNCC防御状态操作
    \
    \
    \
    \
    '; $(".soft-man-con").html(con); tableFixed("siteCon_fix"); }); } function wafAreaLimitRender(){ function keyVal(obj){ var str = []; $.each(obj, function (index, item) { if (item == 1) { if (index == 'allsite') index = '所有站点'; if (index == '海外') index = '中国大陆以外的地区(包括[港,澳,台])'; if (index == '中国') index = '中国大陆(不包括[港,澳,台])'; str.push(index); } }); return str.toString(); } owPost('get_area_limit', {}, function(rdata) { var rdata = $.parseJSON(rdata.data); if (!rdata.status) { layer.msg(rdata.msg, { icon: 2, time: 2000 }); return; } var list = ''; var rlist = rdata.data; for (var i = 0; i < rlist.length; i++) { var op = ''; var type = rlist[i]['types'] === 'refuse' ? '拦截' : '只放行'; var region_str = keyVal(rlist[i]['region']); var site_str = keyVal(rlist[i]['site']); op += '删除'; list += ''; list += '' + region_str + ''; list += '' + site_str + ''; list += '' + type + ''; list += '' + op + ''; list += ''; } $('#con_list tbody').html(list); $('.area_limit_del').click(function(){ var data_id = $(this).data('id'); var site = [],region = []; $.each(rlist[data_id]['site'], function (index, item) { site.push(index); }); $.each(rlist[data_id]['region'], function (index, item) { region.push(index); }); var type = rlist[data_id]['types']; owPost('del_area_limit', { site:site.toString(), region:region.toString(), types:type, }, function(rdata) { var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg, function(){ if (rdata.status){ wafAreaLimit(); } },{ icon: rdata.status ? 1 : 2 }); }); }); }); } function wafAreaLimitSwitch(){ owPostN('waf_conf', {}, function(data){ var rdata = $.parseJSON(data.data); if (rdata['area_limit']){ $('#area_limit_switch').prop('checked', true); } else{ $('#area_limit_switch').prop('checked',false); } }); } function setWafAreaLimitSwitch(){ var area_limit_switch = $('#area_limit_switch').prop('checked'); // console.log(area_limit_switch); var area_limit = 'off'; if (!area_limit_switch){ area_limit = 'on'; } owPostN('area_limit_switch', {'area_limit': area_limit}, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); } // 地区限制 function wafAreaLimit(){ var con = '
    \ \ \ \
    \
    \ \ \ \ \ \ \
    地区站点类型操作
    \
    \
    \
    '; $(".soft-man-con").html(con); wafAreaLimitRender(); wafAreaLimitSwitch(); $('#create_area_limit').click(function(){ var site_list; var area_list; var site_length = 0; layer.open({ type: 1, title: '添加地区限制', area: ['450px','280px'], closeBtn: 1, btn: ['添加', '取消'], content: '
    \
    \ 类型\
    \ \
    \
    \
    \ 站点\
    \
    \
    \
    \
    \ 地区\
    \
    \
    ', success: function (layers, index) { document.getElementById('layui-layer' + index).getElementsByClassName('layui-layer-content')[0].style.overflow = 'unset'; site_list = xmSelect.render({ el: '#site_list', language: 'zn', toolbar: {show: true,}, paging: true, pageSize: 10, data: [], }); owPostN('get_default_site','', function(rdata){ var rdata = $.parseJSON(rdata.data); var rlist = rdata.data.list; var pdata = []; for (var i = 0; i < rlist.length; i++) { var tval = rlist[i]; if (tval != 'unset'){ var t = {name:rlist[i],value:rlist[i]}; pdata.push(t); } } site_length = pdata.length; site_list.update({data:pdata}); }); area_list = xmSelect.render({ el: '#area_list', language: 'zn', toolbar: {show: true,}, filterable: true, data: [], }); owPostN('get_country','', function(rdata){ var rdata = $.parseJSON(rdata.data); var rlist = rdata.data; var pdata = []; for (var i = 0; i < rlist.length; i++) { var tval = rlist[i]; if (tval != 'unset'){ var t = {name:tval,value:tval}; pdata.push(t); } } area_list.update({data:pdata}); }); }, yes: function (indexs) { var reg_type = $('select[name="type"]').val(); var site_val = site_list.getValue('value'); var area_val = area_list.getValue('value'); if (area_val.length <1) return layer.msg('地区最少选一个!', { icon: 2 }); if (site_val.length <1) return layer.msg('站点最少选一个!', { icon: 2 }); var site = ''; if (site_length === site_val.length) { site = 'allsite'; } else { site = site_val.join(); } var area = area_val.join(); var region = area.replace('中国大陆以外的地区(包括[中国特别行政区:港,澳,台])', '海外') .replace('中国大陆(不包括[中国特别行政区:港,澳,台])', '中国') .replace('中国香港', '香港') .replace('中国澳门', '澳门') .replace('中国台湾', '台湾'); owPost('add_area_limit',{ site:site, types:reg_type, region:region, }, function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg, function(){ if (rdata.status){ layer.close(indexs); wafAreaLimit(); } },{ icon: rdata.status ? 1 : 2 }); }); }, }); }); } function wafLogRequest(page){ var args = {}; args['page'] = page; args['page_size'] = 10; args['site'] = $('select[name="site"]').val(); var query_date = 'today'; if ($('#time_choose').attr("data-name") != ''){ query_date = $('#time_choose').attr("data-name"); } else { query_date = $('#search_time button.cur').attr("data-name"); } args['query_date'] = query_date; args['tojs'] = 'wafLogRequest'; owPost('get_logs_list', args, function(rdata){ var rdata = $.parseJSON(rdata.data); var list = ''; var data = rdata.data.data; if (data.length > 0){ for(i in data){ list += ''; list += '' + getLocalTime(data[i]['time'])+''; list += '' + data[i]['domain'] +''; list += '' + data[i]['ip'] +''; list += '' + data[i]['uri'] +'';// data[i]['uri'] list += '' + data[i]['rule_name'] +''; list += '' + entitiesEncode(data[i]['reason']) +'';//data[i]['reason'] list += '详情'; list += ''; } } else{ list += '封锁日志为空'; } var table = '
    \ \ \ \ \ \ \ \ \ \ \ '+ list +'\
    时间域名IPURI规则名原因操作
    \
    \
    '; $('#ws_table').html(table); $('#wsPage').html(rdata.data.page); $(".tablescroll .details").click(function(){ var index = $(this).attr('data-id'); var res = data[index]; var ip = res.ip; var time = getLocalTime(res.time); layer.open({ type: 1, title: "【"+res.domain + "】详情", area: '600px', closeBtn: 1, shadeClose: false, content: '
    \ \
    时间'+ time + '用户IP' + escapeHTML(ip) + '
    类型' + escapeHTML(res.method) + '过滤器' + escapeHTML(res.rule_name) + '
    \
    URI地址
    \
    '+ escapeHTML(res.uri) + '
    \
    User-Agent
    \
    '+ escapeHTML(res.user_agent) + '
    \
    过滤规则
    \
    '+ escapeHTML(res.rule_name) + '
    \
    Reason
    \
    '+ escapeHTML(res.reason) + '
    \
    ' }) }); }); } function wafLogs(){ var randstr = getRandomString(10); var html = '
    \
    \ 网站: \ \ 时间: \
    \
    \ \ \ \ \
    \ \
    \
    \ \ \
    \
    \
    \
    '; $(".soft-man-con").html(html); // wafLogRequest(1); $("#UncoverAll").click(function(){ owPost('clean_drop_ip',{},function(data){ var rdata = $.parseJSON(data.data); var ndata = $.parseJSON(rdata.data); if (ndata.status == 0){ layer.msg("解封所有成功",{icon:1,time:2000,shade: [0.3, '#000']}); } else{ layer.msg("解封所有异常:"+ndata.msg,{icon:5,time:2000,shade: [0.3, '#000']}); } }); }); //测试demo $("#testRun").click(function(){ owPost('test_run',{},function(data){ var rdata = $.parseJSON(data.data); showMsg(rdata.msg, function(){ wafLogRequest(1); },{icon:1,shade: [0.3, '#000']},2000); }); }); //日期范围 laydate.render({ elem: '#time_choose', value:'', range:true, done:function(value, startDate, endDate){ if(!value){ return false; } $('#search_time button').each(function(){ $(this).removeClass('cur'); }); var timeA = value.split('-'); var start = $.trim(timeA[0]+'-'+timeA[1]+'-'+timeA[2]) var end = $.trim(timeA[3]+'-'+timeA[4]+'-'+timeA[5]) query_txt = toUnixTime(start + " 00:00:00") + "-"+ toUnixTime(end + " 00:00:00") $('#time_choose').attr("data-name",query_txt); $('#time_choose').addClass("cur"); wafLogRequest(1); }, }); $('#search_time button:eq(0)').addClass('cur'); $('#search_time button').click(function(){ $('#search_time button').each(function(){ if ($(this).hasClass('cur')){ $(this).removeClass('cur'); } }); $('#time_choose').attr("data-name",''); $('#time_choose').removeClass("cur"); $(this).addClass('cur'); wafLogRequest(1); }); owPostN('get_default_site',{},function(rdata){ $('select[name="site"]').html(''); var rdata = $.parseJSON(rdata.data); var rdata = rdata.data; var default_site = rdata["default"]; var select = ''; for (var i = 0; i < rdata["list"].length; i++) { if (default_site == rdata["list"][i]){ select += ''; } else{ select += ''; } } $('select[name="site"]').html(select); wafLogRequest(1); $('select[name="site"]').change(function(){ wafLogRequest(1); }); }); } function wafOpLogs(){ var con = '
    \ \ \ \ \ \ \ \
    名称描述响应状态操作
    \
    '; $(".soft-man-con").html(con); }