[BUGFIX] Incorrect cHash generation may cause 404 on any page 70/50070/2
authorDmitry Dulepov <dmitry.dulepov@gmail.com>
Wed, 28 Sep 2016 14:46:23 +0000 (17:46 +0300)
committerWouter Wolters <typo3@wouterwolters.nl>
Fri, 30 Sep 2016 07:37:38 +0000 (09:37 +0200)
If an empty parameter appears in the query string passed to
CacheHashCalculator::getRelevantParameters(), the code will
calculate cHash even if there are no other parameters. But
upon going to the generated link, there will be a 404 error
due to failed cHash check. Parameters with trimmed empty
names do not appear in $_GET in PHP and cHash cannot be
validated. The code should ignore the parameter with
trimmed empty name.

Resolves: #78102
Releases: master, 6.2, 7.6
Change-Id: I3c43d62ae9c31bd41674db62090b6b4a520f8b68
Reviewed-on: https://review.typo3.org/50070
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/frontend/Classes/Page/CacheHashCalculator.php
typo3/sysext/frontend/Tests/Unit/Page/CacheHashCalculatorTest.php

index 28cdc96..6687b81 100644 (file)
@@ -154,6 +154,10 @@ class CacheHashCalculator implements \TYPO3\CMS\Core\SingletonInterface
         $parameterArray = [];
         foreach ($parameters as $parameter) {
             list($parameterName, $parameterValue) = explode('=', $parameter);
+            if (trim($parameterName) === '') {
+                // This parameter cannot appear in $_GET in PHP even if its value is not empty, so it should be ignored!
+                continue;
+            }
             $parameterArray[rawurldecode($parameterName)] = rawurldecode($parameterValue);
         }
         return $parameterArray;
index 177fbfd..513b85b 100644 (file)
@@ -150,7 +150,8 @@ class CacheHashCalculatorTest extends \TYPO3\CMS\Core\Tests\UnitTestCase
             'System parameters should not be taken into account (except id)' => ['&id=42&type=23&key=value', $knowHash],
             'Admin panel parameters should not be taken into account' => ['&id=42&TSFE_ADMIN_PANEL[display]=7&key=value', $knowHash],
             'Trivial hash for sorted parameters should be right' => ['&id=42&a=v&b=v', '52c8a1299e20324f90377c43153c4987'],
-            'Parameters should be sorted before cHash is created' => ['&id=42&b=v&a=v', '52c8a1299e20324f90377c43153c4987']
+            'Parameters should be sorted before cHash is created' => ['&id=42&b=v&a=v', '52c8a1299e20324f90377c43153c4987'],
+            'Empty argument names are filtered out before cHash calculation' => ['&id=42&b=v&a=v&=dummy', '52c8a1299e20324f90377c43153c4987']
         ];
     }