From 75cd76db5969a9710ab2602e7453c3b96a683c1f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sat, 6 Oct 2012 22:52:06 +0000 Subject: [PATCH] Dereferrer is now secured with hashes --- inc/functions.php | 30 +++++++++++++++++++++++++----- inc/language/de.php | 7 +++++++ inc/language/user_de.php | 17 ++++++++++++++++- inc/modules/loader.php | 19 ++++++++++++++----- 4 files changed, 62 insertions(+), 11 deletions(-) diff --git a/inc/functions.php b/inc/functions.php index 106feb4dd2..780919b4f6 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -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&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&url=' . $encodedUrl . '&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 diff --git a/inc/language/de.php b/inc/language/de.php index ac2b3118ac..e167425687 100644 --- a/inc/language/de.php +++ b/inc/language/de.php @@ -774,6 +774,8 @@ addMessages(array( 'ADMIN_CONFIG_ENTRY_MISSING' => "Konnte den Konfigurationseintrag %s nicht finden. Muss eventuell ein Erweitertungsupdate noch ausgeführt oder eine fehlende Erweiterung installiert werden?", 'ADMIN_ENTRY_ADDED' => "Der Eintrag wurde der Datenbank hinzugefügt.", 'ADMIN_ENTRY_NOT_ADDED' => "Der Eintrag wurde der Datenbank NICHT hinzugefügt.", + 'MEMBER_ENTRY_ADDED' => "Der Eintrag wurde soeben hinzugefügt.", + 'MEMBER_ENTRY_NOT_ADDED' => "Der Eintrag wurde NICHT hinzugefü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 v0.2.2 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üsystem mit "logischen Bereichen" ist noch nicht fertig und führt zu Fehlern. Bitte dieses nur im Template aktivieren, wenn Sie daran mitprogrammieren wollen.", 'UNKNOWN_ERROR_CODE' => "Unbekannter Fehlercode 0x{%%pipe,getHexErrorCode=%s%%} erkannt.", + 'LOADER_SECURITY_HASH_MISMATCH' => "Der Sicherheitshash für den Dereferrer stimmt nicht mit der URL überein.", // Time units 'TIME_UNIT' => "Zeiteinheit", @@ -1310,6 +1313,10 @@ addMessages(array( 'ADMIN_AJAX_MENU_IS_LOADING' => "Das Adminmenü wird geladen, bitte etwas Geduld . . .", 'ADMIN_AJAX_ERROR_TITLE' => "AJAX-Abfrage im Adminmenü fehlgeschlagen", 'ADMIN_AJAX_WARNING_TITLE' => "Warnung: Es sind ungespeicherte Änderungen vorhanden", + + // Member - submit buttons + 'MEMBER_ACTION_EDIT_SUBMIT' => "Editieren", + 'MEMBER_ACTION_DELETE_SUBMIT' => "Löschen", )); // Description of all months diff --git a/inc/language/user_de.php b/inc/language/user_de.php index 51b3741a2a..4863c6ba14 100644 --- a/inc/language/user_de.php +++ b/inc/language/user_de.php @@ -111,10 +111,25 @@ addMessages(array( 'ADMIN_ADD_TESTER_USER_BIRTHDAY' => "Geburtstag:", 'ADMIN_ADD_TESTER_USER_COUNTRY' => "Land auswä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öschen oder die maximale Anzahl erhö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ügen", + 'MEMBER_ENTER_SUBID' => "Geben Sie eine Sub-Id ein:", + 'MEMBER_ADD_SUBID_LEGEND' => "Daten zur Sub-Id", + 'MEMBER_ADD_SUBID_NOTICE' => "Hinweise:Mit Sub-Ids haben Sie die Möglichkeit, die Aufrufe Ihres Referral-Linkes noch genauer zu verfolgen. Zum Beispiel kö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 &subid=Ihre Sub-Id anhängen. Bewerben Sie nun diesen erweiterten Link. Sobald Aufrufe auf diesen erfolgen, können Sie bei der jeweiligen Sub-Id auf "Aufruf-Statistik" 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ück, wä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öschen von Sub-Ids", + + // Generic - subids + 'SUBID_VALUE' => "Sub-Id", + 'SUBID_ADDED' => "Hinzugefügt", )); // [EOF] diff --git a/inc/modules/loader.php b/inc/modules/loader.php index 294abf4d83..df5647ff08 100644 --- a/inc/modules/loader.php +++ b/inc/modules/loader.php @@ -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'); -- 2.39.2