From 50286625ca09f3f9a7dd2d1ec63741303cb9092e Mon Sep 17 00:00:00 2001 From: Tom Van Looy Date: Wed, 11 May 2022 16:27:22 +0200 Subject: [PATCH] Fix division by zero --- .../Security/Csrf/CsrfTokenManager.php | 3 +++ .../Csrf/Tests/CsrfTokenManagerTest.php | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/Symfony/Component/Security/Csrf/CsrfTokenManager.php b/src/Symfony/Component/Security/Csrf/CsrfTokenManager.php index 3e7454e793d28..14c05592d3241 100644 --- a/src/Symfony/Component/Security/Csrf/CsrfTokenManager.php +++ b/src/Symfony/Component/Security/Csrf/CsrfTokenManager.php @@ -134,6 +134,9 @@ private function derandomize(string $value): string return $value; } $key = base64_decode(strtr($parts[1], '-_', '+/')); + if ('' === $key || false === $key) { + return $value; + } $value = base64_decode(strtr($parts[2], '-_', '+/')); return $this->xor($value, $key); diff --git a/src/Symfony/Component/Security/Csrf/Tests/CsrfTokenManagerTest.php b/src/Symfony/Component/Security/Csrf/Tests/CsrfTokenManagerTest.php index d654bbf195fa4..bd911987f1f2d 100644 --- a/src/Symfony/Component/Security/Csrf/Tests/CsrfTokenManagerTest.php +++ b/src/Symfony/Component/Security/Csrf/Tests/CsrfTokenManagerTest.php @@ -193,6 +193,26 @@ public function testNonExistingTokenIsNotValid($namespace, $manager, $storage) $this->assertFalse($manager->isTokenValid(new CsrfToken('token_id', 'FOOBAR'))); } + public function testTokenShouldNotTriggerDivisionByZero() + { + [$generator, $storage] = $this->getGeneratorAndStorage(); + $manager = new CsrfTokenManager($generator, $storage); + + // Scenario: the token that was returned is abc.def.ghi, and gets modified in the browser to abc..ghi + + $storage->expects($this->once()) + ->method('hasToken') + ->with('https-token_id') + ->willReturn(true); + + $storage->expects($this->once()) + ->method('getToken') + ->with('https-token_id') + ->willReturn('def'); + + $this->assertFalse($manager->isTokenValid(new CsrfToken('token_id', 'abc..ghi'))); + } + /** * @dataProvider getManagerGeneratorAndStorage */ pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy