diff --git a/blockbot/blockbot.php b/blockbot/blockbot.php index 30ecc3a6..5d2242ef 100644 --- a/blockbot/blockbot.php +++ b/blockbot/blockbot.php @@ -11,6 +11,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\System; use Jaybizzle\CrawlerDetect\CrawlerDetect; +use Friendica\Core\Logger; require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; @@ -26,7 +27,23 @@ function blockbot_uninstall() { function blockbot_init_1(App $a) { $crawlerDetect = new CrawlerDetect(); + // List of strings of known "good" agents + $agents = ['diaspora-connection-tester', 'DiasporaFederation', 'Friendica', '(compatible; zot)', + 'Micro.blog', 'Mastodon', 'hackney', 'GangGo', 'python/federation', 'GNU social', 'winHttp', + 'Go-http-client', 'Mr.4x3 Powered', 'Test Certificate Info', 'WordPress.com', 'zgrab', + 'curl/', 'StatusNet', 'OpenGraphReader/', 'Uptimebot/', 'python-opengraph-jaywink']; + if ($crawlerDetect->isCrawler()) { + foreach ($agents as $agent) { + if (stristr($_SERVER['HTTP_USER_AGENT'], $agent)) { + // @ToDo: Report every false positive here: https://github.com/JayBizzle/Crawler-Detect/issues/326 + logger::notice('False positive', ['agent' => $_SERVER['HTTP_USER_AGENT']]); + return; + } + } + logger::info('Blocked bot', ['agent' => $_SERVER['HTTP_USER_AGENT']]); System::httpExit(403, 'Bots are not allowed'); + } else { + logger::debug('Good user agent detected', ['agent' => $_SERVER['HTTP_USER_AGENT']]); } }