Galery2 and Joomla with same userdatabase - Michael Klemm - Website von Michael Klemm aus Dachau

Galery2 and Joomla with same userdatabase

November 20th, 2008 by Michael Klemm

[lang_en][/lang_en][lang_de]

Wo ist das Problem?

Bisher war die Kombination von Joomla und Galery2 für mich eine super Verbindung. Sie lief perfekt integriert und teilte sich auch eine gemeinsame Nutzerdatenbank (die händisch aktualiesiert werden musste). Diese Lösung hatte allerdings auf einen Schlag mit einem Versionsupdate von Joomla ein Ende. Nun (ab Version 1.0.13) werden die Passwörter mit einem längeren SALT und außerdem anders gespeichert. Um dieses Problem zu verstehen und zu beheben habe ich folgenden Artikel geschrieben.

Falls Sie nur an der Lösung und nicht an der Problematik interessiert sind, können Sie weiter unten fortfahren und sich einfach die abgänderte Galery2 herunterladen und mit Ihrer ersetzen.

Was ist denn ein SALT?

Salt sind sozusagen gesalzene Passwörter. Man hielt bislang MD5 für sicher, was sich allerdings mit umfangreichen Passwortdatenbanken, welche durch Eingabe der MD5 das gespeicherte Passwort ausgeben, änderte. Gesalzene Passwörter erhalten nun als Salz ein Zufallspasswort welches dem MD5-Generator mit übergeben wird. Damit der entstandene MD5-Code noch verwertbar ist, ist es notwendig das Salz mitzuspeichern um es bei der Passwortabfrage zum Vergleich wieder mit anzuhängen.

Wie werden die Passwörter gespeichert?

In Galery2:


19aZz1234567890abcdef123456789abcdef
|—|——————————|
Salt             MD5
{0-9|a-z|A-Z}^5    {0-9|a-f}^32

Wie man sieht ist bei Galery2 das Salt am Anfang gespeichert, ist 5 Zeichen lang und hat kein Trennzeichen zum MD5-Code

In Joomla:

1234567890abcdef1234567890abcdef:123BC987ZYXabcde
|——————————|:|————–|
MD5                       Salt
{0-9|a-f}^32           {0-9|a-z|A-Z}^16

Bei Joomla hingegen wird das Salz am Ende angehängt und mit einem “:” getrennt. Außerdem ist hier das Salz länger und beinhaltet 16 Zeichen.

Die Lösung steckt im Code

Um das Problem zu lösen muss nun auf den Code, der für die Authentifizierung zuständig ist zugegriffen werden. Die Datei in der sich dieser Mechanismus befindet ist die folgende:

<<G2-Dir>>/modules/core/classes/GalleryUser.class

Damit die Galery2 dennoch ihre alte Funktionalität behält und mit ihren kürzeren Passwörtern zurecht kommt, muss zunächst abgefragt werden ob es sich bei dem gespeicherten Passwort um ein Galery-Passwort oder ein Joomla-Passwort handelt. Dies geschieht ganz einfach über eine If-Abfrage mit einem strlen() (Länge des Strings):

if (strlen($valid) == 49)

Um nun das Salz und den MD5-Code zu erhalten werden folgende Stringoperationen ausgeführt, die das oben aufgeführte Modell (MD5: {0-9|a-f}^32 / Salt: {0-9|a-z|A-Z}^16) in ihre Bestandteile zerlegen.

$salt = substr($valid, 33, 49);

Nun haben wir folgende Passwortabfrage erhalten, welche Sie auch einfach hier herunterladen können und durch Ihre Datei ersetzen können. Hier nun die Funktion isCorrectPassword() welche wie folgt korrigiert werden muss:

/**
* Is the password provided correct?
*
* @param string $password a plaintext password
* @return boolean true if the password is correct
*/
function isCorrectPassword($password) {
$valid = $this->getHashedPassword();
/**
* New Code by Michael Klemm for Joomla-Support
*/
if (strlen($valid) == 49) {
$salt = substr($valid, 33, 49);
$guess = (md5($password . $salt) . “:” . $salt);
} elseif (strlen($valid) == 36) {
$salt = substr($valid, 0, 4);
$guess = ($salt . md5($salt . $password));
} else {
$guess = md5($password);
}
/**
* Old Code which is no longer in use
* $salt = substr($valid, 0, 4);
* /* Support both old (G1 thru 1.4.0; G2 thru alpha-4) and new password schemes:
* $guess = (strlen($valid) == 32) ? md5($password) : ($salt . md5($salt . $password));
*/
if (!strcmp($guess, $valid)) {
return true;
}
/* Passwords with <&”> created by G2 prior to 2.1 were hashed with entities */
GalleryUtilities::sanitizeInputValues($password, false);
$guess = (strlen($valid) == 32) ? md5($password) : ($salt . md5($salt . $password));
return !strcmp($guess, $valid);
}

DOWNLOAD[/lang_de]

This entry was posted on Thursday, November 20th, 2008 at %0:%Nov %p and is filed under Allgemein. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

6 responses about “Galery2 and Joomla with same userdatabase”

  1. home loan said:

    Lovely. Great site.

  2. Thomas Kaspari said:

    Hi.
    Spitzen Anleitung!
    Doch leider erscheint bei der Übernahme der Funktion nur noch eine blanke Seite.

    Gibt’s da noch einen Unterschied bei der Benutzung von Joomla mit CB? Oder sollte dies auf gleiche Weise funktionieren?

    Der Download der Datei wird leider auf Grund mangelnder Rechte nicht gestattet. Daher konnte ich nicht testen, ob es doch nur ein Übertragungsfehler meinerseits sein könnte.

    Gruß
    tomka

  3. uzydejuborok said:

    uzydejuborok…

    Marshall University And Plane

  4. obikeke said:

    obikeke…

    mugen mario freedownload

  5. BILL said:


    PillSpot.org. Canadian Health&Care.No prescription online pharmacy.Best quality drugs.Special Internet Prices. High quality drugs. Buy pills online

    Buy:Lumigan.100% Pure Okinawan Coral Calcium.Accutane.Arimidex.Zovirax.Petcam (Metacam) Oral Suspension.Actos.Valtrex.Retin-A.Prednisolone.Synthroid.Prevacid.Zyban.Mega Hoodia.Nexium.Human Growth Hormone….

  6. DERRICK said:


    MedicamentSpot.com. Canadian Health&Care.No prescription online pharmacy.Special Internet Prices.Best quality drugs. Low price drugs. Order pills online

    Buy:Maxaman.Viagra.Cialis Super Active+.Cialis Soft Tabs.Cialis.Zithromax.Tramadol.Soma.Viagra Super Active+.Super Active ED Pack.Viagra Super Force.Propecia.Levitra.Viagra Professional.VPXL.Cialis Professional.Viagra Soft Tabs….

Leave a Reply