J3.x:Abwärtskompatibilität in Joomla 3.4.7
From Joomla! Documentation
Was hat sich geändert ?
Ab der Version 3.4.7 verwendet Joomla! einen base64-kodierten Daten-Container, um die Session-Daten in Klartext in der globalen $_SESSION zu speichern.
Im Grunde hat sich folgendes in Joomla! geändert, von
function set($key, $value, $namespace)
{
$_SESSION[$namespace][$key] = $value;
}
zu
function set($key, $value, $namespace)
{
$this->data->set($namespace . ‘.’ . $key, $value);
$_SESSION[‘joomla’] = base64_encode(serialize($this->data));
}
Warum wurde das geändert?
Die Änderung wurde nötig um einen kritischen PHP Fehler zu fixen, der im September 2015 entdeckt wurde. Der Fehler hat mehrere Angriffsvektoren zu Klartext Nutzereingaben verbunden, die in der Session gespeichert wurden.
Wird meine Erweiterung weiterhin funktionieren?
Es gibt 3 Szenarien:
1. Szenario - JSession wird bereits genutzt: In diesem Fall ist alles sicher, weil die API von JSession sich nicht geändert hat. Die Verschlüsselung der Session wurde transparent implementiert, so dass keine Änderungen am Code vorgenommen werden müssen.
2. Szenario - $_SESSION wird genutzt um eigenen, erweiterungsspezifische Daten zu lesen oder zu schreiben: In diesem Fall wird die Erweiterung weiter funktionieren. Der neue Code greift nicht auf andere Daten der globalen $_SESSION Variable zu.
3. Szenario - $_SESSION wird eingesetzt, um generelle mit Joomla! oder anderen Erweiterungen geteilte Daten zu lesen oder zu schreiben: In diesem Fall wird Deine Erweiterung nicht mehr funktionieren, da die interne Struktur von $_SESSION geändert wurde. Eine einfache Lösung ist die direkte Verwendungen von $_SESSION mit JSession zu ersetzen.