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: '',
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 = ({
type: 1,
title: "常用扫描器过滤规则",
area: '650px',
closeBtn: 1,
shadeClose: false,
content: ''
});
});
}
//保存扫描器规则
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: '' +
'
' +
'
' +
'
' + (rdata != '' ? JSON.stringify(rdata) : '') + ' ' +
'
导入格式如下:' +
(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 \
操作 \
\
\
\
\
\
\
\
导入 \
导出 \
\
\
所有规则对白名单中的IP段无效,包括IP黑名单和URL黑名单,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();
// }
// });
// \
}
});
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: '\
\
\
\
\
添加 \
\
\
\
\
\
\
超始IP \
结束IP \
操作 \
\
\
\
\
\
\
导入 \
导出 \
\
\
\
黑名单中的IP段将被禁止访问,IP白名单中已存在的除外 \
\
\
\
\
\
添加 \
\
\
\
黑名单中的IP段将被禁止访问,IP白名单中已存在的除外 \
\
',
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 += '\
在此处关闭防火墙后,所有站点将失去保护 \
网站防火墙会使nginx有一定的性能损失(<5% 10C静态并发测试结果) \
网站防火墙仅主要针对网站渗透攻击,暂时不具备系统加固功能 \
';
$(".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 = '';
con += '\
继承: 全局设置将在站点配置中自动继承为默认值 \
优先级: IP白名单>IP黑名单>URL白名单>URL黑名单>CC防御>User-Agent>URI过滤>URL参数>Cookie>POST \
';
$(".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: '\
\
\
添加 \
\
\
\
除正则表达式语句外规则值对大小写不敏感,建议统一使用小写 '+ ps + '\
'
});
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中获取客户IP \
'
});
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 = '';
$("#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 = '\
\
\
\
\
\
\
站点 \
GET \
POST \
UA \
Cookie \
CDN \
CC防御 \
状态 \
操作 \
\
\
'+ tbody + ' \
\
\
\
\
';
$(".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 wafAreaLimit(){
var con = '';
$(".soft-man-con").html(con);
wafAreaLimitRender();
$('#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 = '\
';
$('#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: '\
\
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);
});
owPost('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 += ''+rdata["list"][i]+' ';
} else{
select += ''+rdata["list"][i]+' ';
}
}
$('select[name="site"]').html(select);
wafLogRequest(1);
$('select[name="site"]').change(function(){
wafLogRequest(1);
});
});
}
function wafOpLogs(){
var con = '';
$(".soft-man-con").html(con);
}