diff --git a/core/Controller/LostController.php b/core/Controller/LostController.php index bc2e7587b7b24..90fddb825eede 100644 --- a/core/Controller/LostController.php +++ b/core/Controller/LostController.php @@ -134,6 +134,8 @@ public function __construct( * * @PublicPage * @NoCSRFRequired + * @BruteForceProtection(action=passwordResetEmail) + * @AnonRateThrottle(limit=10, period=300) * * @param string $token * @param string $userId @@ -147,12 +149,14 @@ public function resetform($token, $userId) { || ($e instanceof InvalidTokenException && !in_array($e->getCode(), [InvalidTokenException::TOKEN_NOT_FOUND, InvalidTokenException::USER_UNKNOWN])) ) { - return new TemplateResponse( + $response = new TemplateResponse( 'core', 'error', [ "errors" => [["error" => $e->getMessage()]] ], TemplateResponse::RENDER_AS_GUEST ); + $response->throttle(); + return $response; } return new TemplateResponse('core', 'error', [ 'errors' => [['error' => $this->l10n->t('Password reset is disabled')]] diff --git a/tests/Core/Controller/LostControllerTest.php b/tests/Core/Controller/LostControllerTest.php index 07b772ea708e3..6eab4722d12d9 100644 --- a/tests/Core/Controller/LostControllerTest.php +++ b/tests/Core/Controller/LostControllerTest.php @@ -171,6 +171,7 @@ public function testResetFormTokenError() { ] ], 'guest'); + $expectedResponse->throttle(); $this->assertEquals($expectedResponse, $response); }