J3.x

Compatibilidad hacia atrás en Joomla 3.4.7

From Joomla! Documentation

This page is a translated version of the page J3.x:Backward Compatibility in Joomla 3.4.7 and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎español • ‎français

¿Qué ha cambiado?

A partir de la versión 3.4.7, Joomla usa un contenedor de datos codificado en base64 para guardar los datos de sesión en lugar de guardarlos como texto plano en la variable global $_SESSION.

Básicamente, Joomla cambió de

function set($key, $value, $namespace)
{
  $_SESSION[$namespace][$key] = $value;
}

a

function set($key, $value, $namespace)
{
  $this->data->set($namespace . ‘.’ . $key, $value); 
  $_SESSION[‘joomla’] = base64_encode(serialize($this->data));
}

¿Por qué se ha cambiado esto?

Fue necesario para solucionar un fallo de seguridad crítico en PHP que se solucionó en septiembre de 2015. Este fallo creaba numerosos vectores de ataque relacionados con los datos en texto plano proporcionados por el usuario guardados en una sesión.

¿Seguirán funcionando mis extensiones?

Tenemos 3 posibles escenarios:

Escenario 1 - Ya estás usando JSession: En este caso estás totalmente a salvo, pues la API de JSession no ha sido modificada. La codificación de la sesión ha sido implementada de forma transparente, de manera que no es necesario hacer ningún cambio en tu código.

Escenario 2 - Estás usando $_SESSION para leer o escribir tus propios datos específicos de la extensión: En este caso tu extensión seguirá funcionando. El nuevo código no toca ningún otro dato en la variable global $_SESSION.

Escenario 3 - Estás usando $_SESSION para leer o escribir datos compartidos con Joomla u otras extensiones: En este caso tu extensión fallará, porque la estructura interna de $_SESSION ha sido modificada. Una solución sencilla es usar JSession para reemplazar usos directos de $_SESSION.