113 lines
3.6 KiB
PHP
113 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace app\admin\controller\webscan;
|
|
|
|
use app\common\controller\Backend;
|
|
|
|
|
|
/**
|
|
*攻击日志
|
|
*/
|
|
class Webscanlog extends Backend
|
|
{
|
|
|
|
public function _initialize()
|
|
{
|
|
parent::_initialize();
|
|
$this->model = new \app\common\model\webscan\WebscanLog();
|
|
}
|
|
|
|
/**
|
|
* 攻击日志
|
|
* @return string|\think\response\Json
|
|
* @throws \think\Exception
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
* @throws \think\exception\DbException
|
|
*/
|
|
public function index()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
|
|
$limit = $limit ? $limit : 10;
|
|
$total = $this->model->where($where)->count();
|
|
$list = $this->model->where($where)->order($sort, $order)->limit($offset, $limit)->fetchSql(false)->select();
|
|
$result = array("total" => $total, "rows" => $list);
|
|
return json($result);
|
|
} else {
|
|
return $this->view->fetch();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 加入黑名单
|
|
* @param null $ip
|
|
*/
|
|
public function black($ip = null)
|
|
{
|
|
|
|
if (!$ip) {
|
|
$this->error("请输入ip");
|
|
}
|
|
|
|
if ($ip == $this->request->ip()) {
|
|
$this->error("不能把自己的IP加入黑名单");
|
|
}
|
|
|
|
//加入黑名单
|
|
$config = get_addon_config('webscan');
|
|
|
|
if ($config['webscan_black_ip']) {
|
|
$webscan_black_ip_arr = explode(PHP_EOL, $config['webscan_black_ip']);
|
|
if (in_array($ip, $webscan_black_ip_arr)) {
|
|
$this->error("{$ip}已是黑名单");
|
|
}
|
|
}
|
|
|
|
//更新配置文件
|
|
$config['webscan_black_ip'] = $config['webscan_black_ip'] . PHP_EOL . $ip;
|
|
set_addon_config('webscan', $config);
|
|
\think\addons\Service::refresh();
|
|
|
|
$this->success("已成功把{$ip}加入了黑名单");
|
|
}
|
|
|
|
/**
|
|
* 攻击概括
|
|
*/
|
|
public function dashboard()
|
|
{
|
|
//今天开始时间
|
|
$beginToday = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
|
|
$todaytimes = $this->model->where('create_time', '>', $beginToday)->count();
|
|
$todayips = $this->model->where('create_time', '>', $beginToday)->group('ip')->count();
|
|
$totaltimes = $this->model->count();
|
|
$totalips = $this->model->group('ip')->count();
|
|
$seventtime = \fast\Date::unixtime('day', -7);
|
|
$totallist = [];
|
|
|
|
for ($i = 0; $i < 7; $i++) {
|
|
$day = date("Y-m-d", $seventtime + ($i * 86400));
|
|
//开始时间
|
|
$beginDay = strtotime($day);
|
|
$endDay = strtotime($day . " 23:59:59");
|
|
$totallist[$day] = $this->model->where('create_time', 'between', [$beginDay, $endDay])->count();
|
|
}
|
|
|
|
$rankingips = $this->model->group('ip')->field('ip,count(ip) as count')->group('ip')->limit(10)->order('count desc')->select();
|
|
$todayranking = $this->model->group('ip')->where('create_time', '>', $beginToday)->field('ip,count(ip) as count')->group('ip')->limit(10)->order('count desc')->select();
|
|
$this->view->assign([
|
|
'todaytimes' => $todaytimes,//今日攻击次数
|
|
'todayips' => $todayips,//今日攻击ip
|
|
'totallist' => $totallist,//
|
|
'rankingips' => $rankingips,//历史攻击排行
|
|
'totaltimes' => $totaltimes,//总攻击
|
|
'totalips' => $totalips,//总ip
|
|
'todayranking' => $todayranking,//今日攻击排行
|
|
|
|
]);
|
|
|
|
return $this->view->fetch();
|
|
}
|
|
}
|