]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat(security): Add a "testing mode" for bruteforce protection that doesn't sleep
authorJoas Schilling <coding@schilljs.com>
Mon, 14 Aug 2023 16:59:50 +0000 (18:59 +0200)
committerJoas Schilling <coding@schilljs.com>
Wed, 23 Aug 2023 04:44:06 +0000 (06:44 +0200)
Signed-off-by: Joas Schilling <coding@schilljs.com>
config/config.sample.php
lib/private/Security/Bruteforce/Throttler.php

index b0aac34c066f41b707fec2f6514ae84b0c896ca9..185473ea6c7c846f7fa9eaa98bee5c5b61269e40 100644 (file)
@@ -352,6 +352,19 @@ $CONFIG = [
  */
 'auth.bruteforce.protection.enabled' => true,
 
+/**
+ * Whether the bruteforce protection shipped with Nextcloud should be set to testing mode.
+ *
+ * In testing mode bruteforce attempts are still recorded, but the requests do
+ * not sleep/wait for the specified time. They will still abort with
+ * "429 Too Many Requests" when the maximum delay is reached.
+ * Enabling this is discouraged for security reasons
+ * and should only be done for debugging and on CI when running tests.
+ *
+ * Defaults to ``false``
+ */
+'auth.bruteforce.protection.testing' => false,
+
 /**
  * Whether the rate limit protection shipped with Nextcloud should be enabled or not.
  *
index a0a41a8b4c4844ef66fc01a103cc9ac7b18455d9..01032c415ff017e9896716b0e89c841afb0e12f9 100644 (file)
@@ -280,7 +280,9 @@ class Throttler implements IThrottler {
         */
        public function sleepDelay(string $ip, string $action = ''): int {
                $delay = $this->getDelay($ip, $action);
-               usleep($delay * 1000);
+               if (!$this->config->getSystemValueBool('auth.bruteforce.protection.testing')) {
+                       usleep($delay * 1000);
+               }
                return $delay;
        }
 
@@ -304,7 +306,9 @@ class Throttler implements IThrottler {
                                'delay' => $delay,
                        ]);
                }
-               usleep($delay * 1000);
+               if (!$this->config->getSystemValueBool('auth.bruteforce.protection.testing')) {
+                       usleep($delay * 1000);
+               }
                return $delay;
        }
 }