Dereferrer is now secured with hashes
authorRoland Häder <roland@mxchange.org>
Sat, 6 Oct 2012 22:52:06 +0000 (22:52 +0000)
committerRoland Häder <roland@mxchange.org>
Sat, 6 Oct 2012 22:52:06 +0000 (22:52 +0000)
inc/functions.php
inc/language/de.php
inc/language/user_de.php
inc/modules/loader.php

index 106feb4dd2bad1bba207aa21ad4449f1ee95f881..780919b4f6a143f38c9f7e5017d08ca896768e48 100644 (file)
@@ -333,8 +333,14 @@ function translateMenuVisibleLocked ($content, $prefix = '') {
 function generateDerefererUrl ($url) {
        // Don't de-refer our own links!
        if (substr($url, 0, strlen(getUrl())) != getUrl()) {
-               // De-refer this link
-               $url = '{%url=modules.php?module=loader&amp;url=' . encodeString(compileUriCode($url)) . '%}';
+               // Encode URL
+               $encodedUrl = encodeString(compileUriCode($url));
+
+               // Log plain URL
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'url=' . $url);
+
+               // De-refer this URL
+               $url = '{%url=modules.php?module=loader&amp;url=' . $encodedUrl . '&amp;hash=' . encodeHashForCookie(generateHash($url)) . '%}';
        } // END - if
 
        // Return link
@@ -547,7 +553,9 @@ function generateRandomCode ($length, $code, $userid, $extraData = '') {
                $len = $length;
        } // END - if
 
-       if ($len == '0') {
+       // Smaller 1 is not okay
+       if ($len < 1) {
+               // Fix it to 10
                $len = 10;
        } // END - if
 
@@ -1298,9 +1306,21 @@ function handleExtraValues ($filterFunction, $value, $extraValue) {
 
                                // Call the multi-parameter call-back
                                $ret = call_user_func_array($filterFunction, $args);
+
+                               // Is $ret 'true'?
+                               if ($ret === true) {
+                                       // Test passed, so write direct value
+                                       $ret = $args;
+                               } // END - if
                        } else {
                                // One parameter call
                                $ret = call_user_func($filterFunction, $value);
+
+                               // Is $ret 'true'?
+                               if ($ret === true) {
+                                       // Test passed, so write direct value
+                                       $ret = $value;
+                               } // END - if
                        }
                } // END - if
        } // END - if
@@ -1354,12 +1374,12 @@ function convertCommaToDot ($str) {
                        $str = str_replace('.', '', $str);
 
                        // Replace german commata with decimal dot and cast it
-                       $float = (float)str_replace(',', '.', $str);
+                       $float = (float) str_replace(',', '.', $str);
                        break;
 
                default: // US and so on
                        // Remove thousand commatas first and cast
-                       $float = (float)str_replace(',', '', $str);
+                       $float = (float) str_replace(',', '', $str);
                        break;
        } // END - switch
 
index ac2b3118acfe852cbeb9c68d18d567fd3a25fc46..e167425687894c6262a87ea3f8c9540706e28563 100644 (file)
@@ -774,6 +774,8 @@ addMessages(array(
        'ADMIN_CONFIG_ENTRY_MISSING' => "Konnte den Konfigurationseintrag %s nicht finden. Muss eventuell ein Erweitertungsupdate noch ausgef&uuml;hrt oder eine fehlende Erweiterung installiert werden?",
        'ADMIN_ENTRY_ADDED' => "Der Eintrag wurde der Datenbank hinzugef&uuml;gt.",
        'ADMIN_ENTRY_NOT_ADDED' => "Der Eintrag wurde der Datenbank NICHT hinzugef&uuml;gt.",
+       'MEMBER_ENTRY_ADDED' => "Der Eintrag wurde soeben hinzugef&uuml;gt.",
+       'MEMBER_ENTRY_NOT_ADDED' => "Der Eintrag wurde NICHT hinzugef&uuml;gt, da er vermutlich bereits existiert. Falls Sie der Meinung sind, dass dies ein Fehler ist, wenden Sie sich an den Support und teilen Sie mit, wie es zu dieser Meldung gekommen ist.",
        'BONUS_EXTENSION_UPGRADE' => "Bitte aktualisieren Sie Ihre Bonus-Erweiterung auf Version <span class=\"data\">v0.2.2</span> oder neuer.",
        'WHAT_IS_WELCOME' => "Willkommen",
        '_ON' => "an",
@@ -1043,6 +1045,7 @@ addMessages(array(
        'MEMBER_YOUR_REFID_IS' => "Sie wurden geworben von",
        'ADMIN_CONFIG_ADMIN_MENU_NOTICE' => "Das Men&uuml;system mit &quot;logischen Bereichen&quot; ist noch nicht fertig und f&uuml;hrt zu Fehlern. Bitte dieses nur im Template aktivieren, wenn Sie daran mitprogrammieren wollen.",
        'UNKNOWN_ERROR_CODE' => "Unbekannter Fehlercode <span class=\"data\">0x{%%pipe,getHexErrorCode=%s%%}</span> erkannt.",
+       'LOADER_SECURITY_HASH_MISMATCH' => "Der Sicherheitshash f&uuml;r den Dereferrer stimmt nicht mit der URL &uuml;berein.",
 
        // Time units
        'TIME_UNIT'         => "Zeiteinheit",
@@ -1310,6 +1313,10 @@ addMessages(array(
        'ADMIN_AJAX_MENU_IS_LOADING' => "Das Adminmen&uuml; wird geladen, bitte etwas Geduld .&nbsp;.&nbsp;.",
        'ADMIN_AJAX_ERROR_TITLE' => "AJAX-Abfrage im Adminmen&uuml; fehlgeschlagen",
        'ADMIN_AJAX_WARNING_TITLE' => "Warnung: Es sind ungespeicherte &Auml;nderungen vorhanden",
+
+       // Member - submit buttons
+       'MEMBER_ACTION_EDIT_SUBMIT' => "Editieren",
+       'MEMBER_ACTION_DELETE_SUBMIT' => "L&ouml;schen",
 ));
 
 // Description of all months
index 51b3741a2a486e1fb5c79e8c07dcc7ede14fe891..4863c6ba148ecbd5e5c2fe3c75b83390f64d9df9 100644 (file)
@@ -111,10 +111,25 @@ addMessages(array(
        'ADMIN_ADD_TESTER_USER_BIRTHDAY' => "Geburtstag:",
        'ADMIN_ADD_TESTER_USER_COUNTRY' => "Land ausw&auml;hlen:",
 
-       // Success/error messages
+       // Admin - success/error messages
        'ADMIN_TESTER_USER_ACCOUNT_CREATION_DONE' => "Es wurde ein Testbenutzeraccount angelegt und sofort freigeschaltet.",
        'ADMIN_MAXIMUM_USER_TESTER_REACHED' => "Sie haben die maximale Anzahl an Testbenutzer angelegt. Entweder sollten Sie wieder welche l&ouml;schen oder die maximale Anzahl erh&ouml;hen (hartkodiertes Maximum ist jedoch 100.000 (99.999+0=100.000).",
        'ADMIN_TESTER_USER_ACCOUNT_CREATION_FAILED' => "Das Anlegen eines Testbenuters ist fehlgeschlagen.",
+
+       // Member - sub ids
+       'MEMBER_USER_SUBIDS_404' => "Sie haben noch keine Sub-Ids angelegt.",
+       'MEMBER_ADD_SUBID_TITLE' => "Neue Sub-Id anlegen",
+       'MEMBER_ADD_SUBID_SUBMIT' => "Sub-Id hinzuf&uuml;gen",
+       'MEMBER_ENTER_SUBID' => "Geben Sie eine Sub-Id ein:",
+       'MEMBER_ADD_SUBID_LEGEND' => "Daten zur Sub-Id",
+       'MEMBER_ADD_SUBID_NOTICE' => "<strong>Hinweise:</strong>Mit Sub-Ids haben Sie die M&ouml;glichkeit, die Aufrufe Ihres Referral-Linkes noch genauer zu verfolgen. Zum Beispiel k&ouml;nnen Sie jedem Besuchertausch oder fremden Paidmailer eine eigene Sub-Id vergeben, indem Sie diese hier zuerst eingeben und dann am Ende des Referral-Linkes mit <strong>&amp;subid=<em>Ihre Sub-Id</em></strong> anh&auml;ngen. Bewerben Sie nun diesen erweiterten Link. Sobald Aufrufe auf diesen erfolgen, k&ouml;nnen Sie bei der jeweiligen Sub-Id auf &quot;Aufruf-Statistik&quot; klicken, um eine detailierte Statistik zu erhalten. Leerzeichen oder Bindestrichen werden automatisch in Unterstriche umgewandelt, es wurden nur Zeichen von A-Z (klein- und grossgeschrieben) und alle Zahlenzeichen sowie Unterstriche angenommen.",
+       'MEMBER_SUBID_NO_SELECTIONS' => "Sie haben keine Auswahl getroffen! Bitte navigieren Sie zur&uuml;ck, w&auml;hlen Sie mindestens eine Sub-Id aus und versuchen Sie es dann erneut.",
+       'MEMBER_USER_SUBID_STATS_LINK' => "Aufrufstatistiken",
+       'MEMBER_USER_SUBID_EDIT_DELETE_TITLE' => "Editieren und L&ouml;schen von Sub-Ids",
+
+       // Generic - subids
+       'SUBID_VALUE' => "Sub-Id",
+       'SUBID_ADDED' => "Hinzugef&uuml;gt",
 ));
 
 // [EOF]
index 294abf4d8378cc648e75c5e468b277f433d4626d..df5647ff081f0bc40886e0e0c625b1efb75c45bd 100644 (file)
@@ -41,14 +41,23 @@ if (!defined('__SECURITY')) {
 } // END - if
 
 // Is an URL specified?
-if (isGetRequestElementSet('url')) {
+if ((isGetRequestElementSet('url')) && (isGetRequestElementSet('hash'))) {
        // Decode URL
-       $url = decodeString(str_replace(' ', '+', compileUriCode(urldecode(getRequestElement('url')))));
+       $decodedUrl = decodeString(str_replace(' ', '+', compileUriCode(urldecode(getRequestElement('url')))));
 
-       // Validate the URL
-       if (isUrlValid($url)) {
+       // Generate hash for comparing it
+       $hash = encodeHashForCookie(generateHash($decodedUrl, getRequestElement('hash')));
+
+       // Validate the URL and hash
+       if ($hash != getRequestElement('hash')) {
+               // Hash doesn't match
+               displayMessage('{--LOADER_SECURITY_HASH_MISMATCH--}');
+
+               // Log this event
+               logDebugMessage(__FILE__, __LINE__, 'Hash ' . getRequestElement('hash') . ' does not match URL ' . $decodedUrl);
+       } elseif (isUrlValid($decodedUrl)) {
                // Generate a JavaScript that redirects us
-               loadTemplate('loader', false, $url);
+               loadTemplate('loader', false, $decodedUrl);
        } else {
                // URL invalid
                redirectToUrl('modules.php?module=index');