Skip to content

Commit f38dd78

Browse files
committed
added bot middleware
1 parent 8b75b52 commit f38dd78

File tree

5 files changed

+64
-18
lines changed

5 files changed

+64
-18
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ Available middlewares applicable to routes:
8181
firewall.all
8282

8383
firewall.agent
84+
firewall.bot
8485
firewall.geo
8586
firewall.ip
8687
firewall.lfi

src/Config/firewall.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
'all_middleware' => [
4343
'firewall.ip',
4444
'firewall.agent',
45+
'firewall.bot',
4546
'firewall.geo',
4647
'firewall.lfi',
4748
'firewall.php',
@@ -94,7 +95,26 @@
9495
'block' => [], // i.e. 'AppleWebKit'
9596
],
9697

97-
'allow_robots' => true,
98+
'auto_block' => [
99+
'attempts' => 5,
100+
'frequency' => 1 * 60, // 1 minute
101+
'period' => 30 * 60, // 30 minutes
102+
],
103+
],
104+
105+
'bot' => [
106+
'methods' => ['all'],
107+
108+
'routes' => [
109+
'only' => [], // i.e. 'contact'
110+
'except' => [], // i.e. 'admin/*'
111+
],
112+
113+
// https://github.com/JayBizzle/Crawler-Detect/blob/master/raw/Crawlers.txt
114+
'crawlers' => [
115+
'allow' => [], // i.e. 'GoogleSites', 'GuzzleHttp'
116+
'block' => [], // i.e. 'Holmes'
117+
],
98118

99119
'auto_block' => [
100120
'attempts' => 5,

src/Middleware/Agent.php

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ public function check($patterns)
3636
$status = true;
3737
}
3838

39-
if (!$status && $this->isRobot()) {
40-
$status = true;
41-
}
42-
4339
if ($status) {
4440
$log = $this->log();
4541

@@ -171,17 +167,4 @@ protected function isProperty()
171167

172168
return false;
173169
}
174-
175-
protected function isRobot()
176-
{
177-
if (config('firewall.middleware.' . $this->middleware . '.allow_robots')) {
178-
return false;
179-
}
180-
181-
if ($this->parser->isRobot()) {
182-
return true;
183-
}
184-
185-
return false;
186-
}
187170
}

src/Middleware/Bot.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace Akaunting\Firewall\Middleware;
4+
5+
use Akaunting\Firewall\Abstracts\Middleware;
6+
use Akaunting\Firewall\Events\AttackDetected;
7+
use Jenssegers\Agent\Agent;
8+
9+
class Bot extends Middleware
10+
{
11+
public function check($patterns)
12+
{
13+
$agent = new Agent();
14+
15+
if (!$agent->isRobot()) {
16+
return false;
17+
}
18+
19+
if (!$crawlers = config('firewall.middleware.' . $this->middleware . '.crawlers')) {
20+
return false;
21+
}
22+
23+
$status = false;
24+
25+
if (!empty($crawlers['allow']) && !in_array((string) $agent->robot(), (array) $crawlers['allow'])) {
26+
$status = true;
27+
}
28+
29+
if (in_array((string) $agent->robot(), (array) $crawlers['block'])) {
30+
$status = true;
31+
}
32+
33+
if ($status) {
34+
$log = $this->log();
35+
36+
event(new AttackDetected($log));
37+
}
38+
39+
return $status;
40+
}
41+
}

src/Provider.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public function registerMiddleware($router)
5959
{
6060
$router->middlewareGroup('firewall.all', config('firewall.all_middleware'));
6161
$router->aliasMiddleware('firewall.agent', 'Akaunting\Firewall\Middleware\Agent');
62+
$router->aliasMiddleware('firewall.bot', 'Akaunting\Firewall\Middleware\Bot');
6263
$router->aliasMiddleware('firewall.ip', 'Akaunting\Firewall\Middleware\Ip');
6364
$router->aliasMiddleware('firewall.geo', 'Akaunting\Firewall\Middleware\Geo');
6465
$router->aliasMiddleware('firewall.lfi', 'Akaunting\Firewall\Middleware\Lfi');

0 commit comments

Comments
 (0)