Обратная совместимость в Joomla! 3.4.7

21 декабря вышла Joomla! 3.4.7, в которой была исправлена уязвимость, связанная с сессиями. Это обновление было необходимо из-за критического бага PHP, который был исправлен в сентябре 2015.

Разработчикам нужно принять во внимание тот факт, что изменилось поведение при работе с $_SESSION.

Итак, начиная с версии 3.4.7 Joomla использует base64 кодированные данные вместо чистого текста для сохранения данных сессии в $_SESSION.

Было:

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));
}

Что это значит для ваших расширений:

  • если вы используете JSession, то всё в порядке – никаких изменений не требуется;
  • если вы используете $_SESSION только внутри своего расширения, то тоже всё в порядке;
  • если вы используете $_SESSION для записи/чтения данных, которые могут прочтены другими расширениями или Joomla, то вероятнее всего ваше расширение перестанет работать корректно. Простой фикс – заменить использование $_SESSION на JSession.