Rétro-compatibilité dans Joomla! 3.4.7
From Joomla! Documentation
Qu'est-ce qui a changé ?
A partir de la version 3.4.7, Joomla! utilise un conteneur de données encodées en base64 pour enregistrer les données de la session au lieu d'une sauvegarde des données en clair dans $_SESSION.
Principalement, Joomla! est passé de :
function set($key, $value, $namespace)
{
$_SESSION[$namespace][$key] = $value;
}
à
function set($key, $value, $namespace)
{
$this->data->set($namespace . ‘.’ . $key, $value);
$_SESSION[‘joomla’] = base64_encode(serialize($this->data));
}
Pourquoi ce changement ?
Cela était nécessaire pour travailler sur une anomalie critique de PHP qui a été corrigée en septembre 2015. L'anomalie crée plusieurs attaques vectorielles liées aux données en clair enregistrées par l'utilisateur lors d'une session.
Est-ce que mes extensions vont tout de même fonctionner ?
Nous avons 3 scénarios :
Scénario 1 - Vous utilisez déjà JSession : dans ce cas, vous êtes parfaitement en sécurité puisque l'API de JSession n'a pas été modifié. Le codage de session a été mis en œuvre de manière transparente, donc aucune modification de votre code n'est nécessaire.
Scénario 2 - Vous utilisez $_SESSION pour lire ou écrire vos propres données spécifiques à une extension : dans ce cas, votre extension continuera de fonctionner. Le nouveau code ne touche aucune autre donnée de la variable $_SESSION.
Scénario 3 - Vous utilisez $_SESSION pour lire ou écrire des données générales partagées avec Joomla! ou d'autres extensions : dans ce cas, votre extension ne sera plus à même de fonctionner car la structure interne de $_SESSION a été modifiée. Une solution facile est d'utiliser JSession pour remplacer directement les utilisations de $_SESSION.