public function PerimeterSubscriber::handleBannedUrls in Drupal Perimeter Defence 2.0.x
Same name and namespace in other branches
- 8 src/EventSubscriber/PerimeterSubscriber.php \Drupal\perimeter\EventSubscriber\PerimeterSubscriber::handleBannedUrls()
On page not found events, ban the IP if the request is suspicious.
File
- src/
EventSubscriber/ PerimeterSubscriber.php, line 42
Class
- PerimeterSubscriber
- On page not found events, ban the IP if the request is suspicious.
Namespace
Drupal\perimeter\EventSubscriberCode
public function handleBannedUrls(Event $event) {
$exception = $event
->getException();
if ($exception instanceof NotFoundHttpException) {
$request_path = $event
->getRequest()
->getPathInfo();
$bannedPatterns = $this->configFactory
->get('perimeter.settings')
->get('not_found_exception_patterns');
if (!empty($bannedPatterns)) {
foreach ($bannedPatterns as $pattern) {
$pattern = trim($pattern);
if (preg_match($pattern, $request_path)) {
$connection = Database::getConnection();
$banManager = new BanIpManager($connection);
$banManager
->banIp($event
->getRequest()
->getClientIp());
$this->loggerFactory
->get('Perimeter')
->notice('Banned: %ip for requesting %pattern <br />Source: %source <br /> User Agent: %browser', [
'%ip' => $event
->getRequest()
->getClientIp(),
'%pattern' => Xss::filter($request_path),
'%source' => isset($_SERVER['HTTP_REFERER']) ? Xss::filter($_SERVER['HTTP_REFERER']) : '',
'%browser' => isset($_SERVER['HTTP_USER_AGENT']) ? Xss::filter($_SERVER['HTTP_USER_AGENT']) : '',
]);
break;
}
}
}
}
}