Fixed bug #10201: Changed cHashes to use full md5 values to reduce the probability...
authorFrancois Suter <francois.suter@typo3.org>
Mon, 7 Sep 2009 20:13:02 +0000 (20:13 +0000)
committerFrancois Suter <francois.suter@typo3.org>
Mon, 7 Sep 2009 20:13:02 +0000 (20:13 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@5910 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
NEWS.txt
t3lib/class.t3lib_div.php
typo3/sysext/cms/tslib/class.tslib_content.php
typo3/sysext/cms/tslib/class.tslib_fe.php
typo3/sysext/indexed_search/class.indexer.php

index f6fdb88..396c159 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2009-09-07  Francois Suter  <francois@typo3.org>
+
+       * Fixed bug #10201: Changed cHashes to use full md5 values to reduce the probability of duplicate hashes (thanks to Dan Osipov)
+
 2009-09-07  Tobias Liebig  <mail_typo3@etobi.de>
 
        * Fixed bug #11841: Hardcoded labels in t3editor (thanks to Christopher Stelmaszyk)
index c475a05..a8b7681 100644 (file)
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -139,6 +139,11 @@ Frontend
          This behaviour can be modified or disabled by changing [GFX][im_stripProfileCommand] in
          the install tool or by setting the TypoScript property "stripProfile" on IMAGE objects.
 
+       * cHashes now use the full md5 hash instead of the short hash previously calculated by
+         t3lib_div::shortMD5(). This reduces the risk of duplicate hashes, which could happend
+         in large web sites. However this may cause compatibility issues with some extensions
+         (see Compatibility below).
+
 Compatibility
 =============
 
@@ -163,6 +168,10 @@ Compatibility
          The update wizard can switch the versions of the static includes by refering to
          the TYPO3 compatibility version.
 
+       * As mentioned in "Frontend", cHash use full-length md5 now. This has an impact on extensions
+         that make use of the cHash, like RealURL or the Crawler. Make sure to update those extensions
+         to their latest version.
+
 Development
 ===========
 
index a9c1c39..6b18acf 100644 (file)
@@ -4260,7 +4260,7 @@ final class t3lib_div {
         *
         * @param       string          Query-parameters: "&xxx=yyy&zzz=uuu"
         * @return      array           Array with key/value pairs of query-parameters WITHOUT a certain list of variable names (like id, type, no_cache etc.) and WITH a variable, encryptionKey, specific for this server/installation
-        * @see tslib_fe::makeCacheHash(), tslib_cObj::typoLink()
+        * @see tslib_fe::makeCacheHash(), tslib_cObj::typoLink(), t3lib_div::calculateCHash()
         */
        public static function cHashParams($addQueryParams) {
                $params = explode('&',substr($addQueryParams,1));       // Splitting parameters up
@@ -4296,6 +4296,30 @@ final class t3lib_div {
        }
 
        /**
+        * Returns the cHash based on provided query parameters and added values from internal call
+        *
+        * @param       string          Query-parameters: "&xxx=yyy&zzz=uuu"
+        * @return      string          Hash of all the values
+        * @see t3lib_div::cHashParams(), t3lib_div::calculateCHash()
+        */
+       public static function generateCHash($addQueryParams) {
+               $cHashParams = t3lib_div::cHashParams($addQueryParams);
+               $cHash = t3lib_div::calculateCHash($cHashParams);
+               return $cHash;
+       }
+
+       /**
+        * Calculates the cHash based on the provided parameters
+        *
+        * @param       array           Array of key-value pairs
+        * @return      string          Hash of all the values
+        */
+       public static function calculateCHash($params) {
+               $cHash = md5(serialize($params));
+               return $cHash;
+       }
+
+       /**
         * Responds on input localization setting value whether the page it comes from should be hidden if no translation exists or not.
         *
         * @param       integer         Value from "l18n_cfg" field of a page record
index e7052bf..81f22d0 100644 (file)
@@ -5971,8 +5971,8 @@ class tslib_cObj {
                                                if (substr($addQueryParams,0,1)!='&')           {
                                                        $addQueryParams = '';
                                                } elseif ($conf['useCacheHash']) {      // cache hashing:
-                                                       $pA = t3lib_div::cHashParams($addQueryParams.$GLOBALS['TSFE']->linkVars);       // Added '.$this->linkVars' dec 2003: The need for adding the linkVars is that they will be included in the link, but not the cHash. Thus the linkVars will always be the problem that prevents the cHash from working. I cannot see what negative implications in terms of incompatibilities this could bring, but for now I hope there are none. So here we go... (- kasper)
-                                                       $addQueryParams.= '&cHash='.t3lib_div::shortMD5(serialize($pA));
+                                                               // Added '.$this->linkVars' dec 2003: The need for adding the linkVars is that they will be included in the link, but not the cHash. Thus the linkVars will always be the problem that prevents the cHash from working. I cannot see what negative implications in terms of incompatibilities this could bring, but for now I hope there are none. So here we go... (- kasper);
+                                                       $addQueryParams .= '&cHash=' . t3lib_div::generateCHash($addQueryParams . $GLOBALS['TSFE']->linkVars);
                                                }
 
                                                $tCR_domain = '';
index 1936d23..f599f4f 100644 (file)
                $GET = t3lib_div::_GET();
                if ($this->cHash && is_array($GET))     {
                        $this->cHash_array = t3lib_div::cHashParams(t3lib_div::implodeArrayForUrl('',$GET));
-                       $cHash_calc = t3lib_div::shortMD5(serialize($this->cHash_array));
+                       $cHash_calc = t3lib_div::calculateCHash($this->cHash_array);
 
                        if ($cHash_calc!=$this->cHash)  {
                                if ($this->TYPO3_CONF_VARS['FE']['pageNotFoundOnCHashError']) {
index d5cfed7..e3490da 100755 (executable)
@@ -331,7 +331,7 @@ class tx_indexedsearch_indexer {
                $this->conf['gr_list'] = '0,-1';        // Group list (hardcoded for now...)
 
                        // cHash values:
-               $this->conf['cHash'] = $createCHash ? $this->makeCHash($cHash_array) : '';      // cHash string for additional parameters
+               $this->conf['cHash'] = $createCHash ? t3lib_div::generateCHash(t3lib_div::implodeArrayForUrl('', $cHash_array)) : '';   // cHash string for additional parameters
                $this->conf['cHash_array'] = $cHash_array;              // Array of the additional parameters
 
                        // Set to defaults
@@ -1995,6 +1995,7 @@ class tx_indexedsearch_indexer {
         *
         * @param       array           Array of GET parameters to encode
         * @return      void
+        * @deprecated since TYPO3 4.3 - use directly t3lib_div::calculateCHash()
         */
        function makeCHash($paramArray) {
                $addQueryParams = t3lib_div::implodeArrayForUrl('', $paramArray);