| 
<?php/*
 * script for bad requests logs management
 * License: GNU
 * Copyright 2016 WebAppFirewall RomanShneer <[email protected]>
 */
 session_start();
 require_once "libs/db.inc.php";
 require_once "libs/waf_report.class.php";
 
 $WR=new WafReport;
 $logs=$WR->get_logs($_GET);
 function get_page_link($page,$get)
 {
 $get['wafpage']=$page;
 $link='';
 $parts=Array();
 foreach($get as $gn=>$gv)
 $parts[]=$gn.'='.$gv;
 return implode('&',$parts);
 }
 if(!isset($_GET['wafpage']))$_GET['wafpage']=1;
 ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"  xml:lang="en" lang="en">
 <head>
 <?php require_once "include/head.php"; ?>
 </head>
 <body>
 <?php include_once 'include/header.php';?>
 <div class="logs_search_form" style="text-align: center;background:#fff;">
 <form action="" method="GET">
 SegmentID: <input type="text" name="sid" size="3" class="inset" value="<?php echo isset($_GET['sid'])?$_GET['sid']:'';?>">
 Type: <select name="type" class="inset" >
 <option value="0">All</option>
 <?php foreach($WR->types_logs as $opt=>$optval):?>
 <option value="<?php echo $opt;?>" <?php if(isset($_GET['type'])&&($_GET['type']==$opt)):?> selected<?php endif;?>><?php echo $optval;?></option>
 <?php endforeach;?>
 </select>
 
 From Date: <input type="text" id="from_date" size="8"  name="from_date" size="10" class="inset" value="<?php echo isset($_GET['from_date'])?$_GET['from_date']:'';?>" readonly>
 To Date: <input type="text" id="to_date"  size="8" name="to_date" size="10" class="inset" value="<?php echo isset($_GET['to_date'])?$_GET['to_date']:'';?>" readonly>
 IP:        <input type="text" name="ip" size="10" class="inset" value="<?php echo isset($_GET['ip'])?$_GET['ip']:'';?>">
 URL: <input type="text" name="url" size="37"  class="inset" value="<?php echo isset($_GET['url'])?$_GET['url']:"";?>">
 <input type="hidden" name="page" value="1" class="inset">
 <input type="submit" id="search_logs" value="Search">
 <img src='assets/imgs/question.png' width="20" id="filter_help" title="Help">
 </form>
 </div>
 <div class="box_logs">
 <table class="logs_report" cellpadding="0" cellspacing="0">
 <caption>Found <?php echo $WR->logs_count;?> event</caption>
 <tr>
 <th><?php if($logs):?><input type="checkbox" class="chbx_all"><?php endif;?> </th>
 <th>Seg.ID</th>
 <th>Type</th>
 <th>Time</th>
 <th>URL</th>
 <th>IP</th>
 <th>Reason</th>
 
 
 </tr>
 <?php if($logs):?>
 <?php foreach($logs as $log):
 $content= json_decode(base64_decode($log['content']));
 $reason= htmlspecialchars(base64_decode($log['reason']));
 
 ?>
 <tr>
 <td><input type="checkbox" class="chbx" rel="<?php echo $log['id'];?>" name="chbx"></td>
 <td><?php if(!empty($log['sid'])):?><a href="map.php?approved=-1&bf=-1&use_type=-1&vars=-1&sid=<?php echo $log['sid']?>"><?php echo $log['sid']?></a><?php endif;?></td>
 <td nowrap><small><?php echo $WR->types_logs[$log['type']];?></small></td>
 <td><?php echo date('H:i d/m/Y',strtotime($log['created']));?></td>
 <td class="tooltip" title="<?php echo isset($content->request)?  str_replace('"','``',print_r($content->request,1)):'';?>">
 <a href="<?php echo htmlspecialchars($log['url']);?>" target="_blank"><?php echo htmlspecialchars($log['url']);?></a></td>
 <td class="tooltip" title="<?php echo str_replace('"','``',print_r($content->server,1));?>"><?php echo $log['ip'];?></td>
 <td class="tooltip" title="<?php echo $reason;?>"><?php echo substr($reason,0,150);?></td>
 </tr>
 <?php endforeach;?>
 <?php endif;?>
 </table>
 
 <?php if($WR->isEditor()):?>
 <div style="padding:3px;">
 <a href="javascript://" id="import" class="green_btn">Import Logs</a><input id="import-file" type="file"  style="display:none"/> 
 <?php if($logs):?>
 <input type="button" value="Export Logs" id="export" class="green_btn" title="export logs filtered by form"><a id="export_helper"></a> 
 <input type="button" value="Delete Selected" id="delete_selected" class="red_btn" title="delete only selected logs by checkbox"> 
 <input type="button" value="Delete Logs" id="truncate_logs" class="red_btn" title="delete logs via form's filter"> 
 <?php endif;?>
 </div>
 <?php endif;?>
 <?php if($logs):?>
 <div class="pagging">
 <?php
 $min=$_GET['wafpage']-3;
 if($min<1)$min=1;
 $max=$_GET['wafpage']+3;
 if($max>$WR->total_pages)$max=$WR->total_pages;
 ?>
 <?php if($_GET['wafpage']!=1):?><a href="logs.php?<?php echo get_page_link(1,$_GET);?>">«</a><?php endif;?>
 <?php for($p=$min;$p<=$max;$p++):?>
 <?php if($p!=$_GET['wafpage']):?><a href="logs.php?<?php echo get_page_link($p,$_GET);?>"><?php endif;?>
 <?php echo $p;?>
 <?php if($p!=$_GET['wafpage']):?></a><?php endif;?>
 <?php endfor;?>
 <?php if($_GET['wafpage']!=$WR->total_pages):?><a href="logs.php?<?php echo get_page_link($WR->total_pages,$_GET);?>">»</a><?php endif;?>
 </div>
 <?php endif;?>
 </div>
 
 <script>
 $(function() {
 $( "#from_date" ).datepicker({'dateFormat':'dd-mm-yy'});
 $( "#to_date" ).datepicker({'dateFormat':'dd-mm-yy'});
 
 //chbx_all
 $('.chbx_all').change(function (){
 if($('.chbx_all').is(":checked"))$('.chbx').prop('checked',true);
 else $('.chbx').prop('checked',false);
 });
 //delete selected
 $('#delete_selected').click(function  (){
 var ids=[];
 $("#loader").show();
 $('.chbx:checked').each(function (i,box){ids.push($(box).attr('rel'));});
 $.get('ajax.php?act=delete_logs&ids='+ids.join(","), {}, function() {
 location.reload();
 });
 
 });
 //truncate logs
 $('#truncate_logs').click(function (){
 if(confirm("Delete logs filtered by form?"))
 {
 $("#loader").show();
 var p=location.href.split("?");
 
 $.get('ajax.php?act=truncate_logs&'+((typeof p[1]!='undefiend')?p[1]:''), {}, function() {
 location.reload();
 });
 
 }else{
 return false;
 }
 });
 //export
 $('#export').click(function (){
 if(confirm("Export filtered by form"))
 {
 var params=location.href.split("?");
 $("#loader").show();
 $.get('ajax.php?act=export_logs&'+((typeof params[1]!='undefined')?params[1]:''), {}, function(data) {
 var dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(data));
 var dlAnchorElem = $('#export_helper');
 dlAnchorElem.attr("href",dataStr);
 var d = new Date();
 var month=(d.getMonth()+1);
 if(month==13)month=1;
 dlAnchorElem.attr("download", "waf_logs."+d.getFullYear()+month+d.getDate()+".json");
 $("#loader").hide();
 dlAnchorElem[0].click();
 
 });
 }
 });
 //import
 $('#import').click(function (){
 $('#import-file').click();
 $('#import-file').change(function (event){
 
 if(event.target.files.length>0)
 {
 var files=event.target.files;
 var reader = new FileReader();
 reader.readAsText(files[0], "UTF-8");
 reader.onload = function (evt) {
 $("#loader").show();
 $.ajax({
 url: 'ajax.php?act=import_logs',
 type: 'POST',
 data: evt.target.result,
 cache: false,
 dataType: 'json',
 processData: false, // Don't process the files
 contentType: false, // Set content type to false as jQuery will tell the server its a query string request
 success: function(data, textStatus, jqXHR)
 {
 $("#loader").hide();
 if(typeof data.error === 'undefined')
 {
 alert('Imported '+data.count+' items');
 location.reload();
 }else{alert('ERRORS: ' + data.error);}
 },
 error: function(jqXHR, textStatus, errorThrown){$("#loader").hide(); alert('ERRORS: ' + textStatus);}
 });
 
 }
 
 
 }
 });
 });
 //help
 $('#filter_help').click(function (){
 $('.legend_box').show();
 });
 $('#close_legends').click(function (){
 $('.legend_box').hide();
 });
 });
 
 </script>
 <!--VARS SINGLE MENU EOF-->
 <div id="loader"><img src="assets/imgs/loader.gif"></div>
 <div class='legend_box'><img src="assets/imgs/x.png" class="x" id="close_legends" style="float:right;">
 Point cursor to URL field - for read full Request info<br>
 Point cursor to IP field - for read full Server info<br>
 Point cursor to Reason fields - for read full Reason information<br>
 Click on Segment ID number for view segment in Access Map
 </div>
 </body>
 </html>
 |