diff --git a/common/defaults/config.php b/common/defaults/config.php index 269858871..05fc33d57 100644 --- a/common/defaults/config.php +++ b/common/defaults/config.php @@ -115,6 +115,7 @@ return array( 'classes' => array(), ), 'security' => array( + 'robot_user_agents' => array(), 'check_csrf_token' => false, 'nofollow' => false, ), diff --git a/common/framework/ua.php b/common/framework/ua.php index 72a2e9347..5c8b6b6dc 100644 --- a/common/framework/ua.php +++ b/common/framework/ua.php @@ -151,6 +151,16 @@ class UA return self::$_robot_cache[$ua] = true; } + // Use the custom user-agent list. + $customlist = Config::get('security.robot_user_agents') ?: array(); + foreach ($customlist as $item) + { + if (strpos($ua, $item) !== false) + { + return self::$_robot_cache[$ua] = true; + } + } + // If we're here, it's probably not a robot. return self::$_robot_cache[$ua] = false; } diff --git a/modules/admin/admin.admin.controller.php b/modules/admin/admin.admin.controller.php index 7e220e215..b0d6a3936 100644 --- a/modules/admin/admin.admin.controller.php +++ b/modules/admin/admin.admin.controller.php @@ -652,6 +652,13 @@ class adminAdminController extends admin natcasesort($classes); Rhymix\Framework\Config::set('mediafilter.classes', array_values($classes)); + // Robot user agents + $robot_user_agents = $vars->robot_user_agents; + $robot_user_agents = array_filter(array_map('trim', preg_split('/[\r\n]/', $robot_user_agents)), function($item) { + return $item !== ''; + }); + Rhymix\Framework\Config::set('security.robot_user_agents', array_values($robot_user_agents)); + // Remove old embed filter $config = Rhymix\Framework\Config::getAll(); unset($config['embedfilter']); diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php index 58b560d98..ed1fb8849 100644 --- a/modules/admin/admin.admin.view.php +++ b/modules/admin/admin.admin.view.php @@ -438,6 +438,10 @@ class adminAdminView extends admin context::set('mediafilter_object', implode(PHP_EOL, Rhymix\Framework\Filters\MediaFilter::getObjectWhitelist())); context::set('mediafilter_classes', implode(PHP_EOL, Rhymix\Framework\Config::get('mediafilter.classes') ?: array())); + // Load robot user agents. + $robot_user_agents = Rhymix\Framework\Config::get('security.robot_user_agents') ?: array(); + Context::set('robot_user_agents', implode(PHP_EOL, $robot_user_agents)); + // Admin IP access control $allowed_ip = Rhymix\Framework\Config::get('admin.allow'); Context::set('admin_allowed_ip', implode(PHP_EOL, $allowed_ip)); diff --git a/modules/admin/tpl/config_security.html b/modules/admin/tpl/config_security.html index ae99efdb1..a8a62051d 100644 --- a/modules/admin/tpl/config_security.html +++ b/modules/admin/tpl/config_security.html @@ -28,6 +28,12 @@ +