2014-09-19 3 views
0

Вчера в Joomla VEL была объявлена ​​уязвимость в компоненте, который я бы не упомянул здесь, чтобы не распространять эту информацию и что я хотел бы исправить.Уязвимость для инъекций MySQL для Joomla 1.5/2.5/3

Эта уязвимость применяется также к версии компонента Joomla 1.5, но команда разработчиков устраняет эту уязвимость только в версиях Joomla 2.5 и 3.x. Я собираюсь опубликовать здесь функцию, которая была изменена в Joomla 2.5 и Joomla 3, и я хотел бы знать, могу ли я изменить одну и ту же функцию таким же образом или по-другому, чтобы быть совместимым с версией Joomla 1.5 ,

В следующем примере, пожалуйста, подумайте, что я отредактирую код, чтобы удалить имя компонента.

Таким образом, исходная функция в Joomla 3 был:

function _setExtension($option) { 
    static $components = array(); 

    if (!isset($components[$option])) { 
     $filter = ComponentUtility::getSkippedComponents(); 
     $component = ComponentDatabase::loadResult("SELECT `element` FROM `#__extensions` WHERE `type` = 'component' AND `element` NOT IN ({$filter}) AND `element` = '{$option}'"); 

Это было исправлено следующим образом:

function _setExtension($option) { 
    static $components = array(); 

    if (!isset($components[$option])) { 
     $filter = ComponentUtility::getSkippedComponents(); 
     $option = ComponentDatabase::escape($option); 
     $component = ComponentDatabase::loadResult("SELECT `element` FROM `#__extensions` WHERE `type` = 'component' AND `element` NOT IN ({$filter}) AND `element` = '{$option}'"); 

В Joomla 2.5, исходная функция была:

function _setExtension($option) { 
    static $components = array(); 

    if (!isset($components[$option])) { 
     $filter = ComponentUtility::getSkippedComponents(); 
     $component = ComponentDatabase::loadResult("SELECT `element` FROM `#__extensions` WHERE `type` = 'component' AND `element` NOT IN ({$filter}) AND `element` = '{$option}'"); 

Это было исправлено следующим образом:

function _setExtension($option) { 
    static $components = array(); 

    if (!isset($components[$option])) { 
     $filter = ComponentUtility::getSkippedComponents(); 
     $option = ComponentDatabase::getEscaped($option); 
     $component = ComponentDatabase::loadResult("SELECT `element` FROM `#__extensions` WHERE `type` = 'component' AND `element` NOT IN ({$filter}) AND `element` = '{$option}'"); 

В Joomla 1.5, оригинальная функция:

function _setExtension($option) { 
    static $components = array(); 

    if (!isset($components[$option])) { 
     $filter = "'com_sef', 'com_sh404sef', 'com_joomfish', 'com_config', 'com_media', 'com_installer', 'com_templates', 'com_plugins', 'com_modules', 'com_cpanel', 'com_cache', 'com_messages', 'com_menus', 'com_massmail', 'com_languages', 'com_users'"; 
     $component = ComponentDatabase::loadResult('SELECT `option` FROM `#__components` WHERE `parent` = "0" AND `option` NOT IN ('.$filter.') AND `option` = "'.$option.'"'); 

И это не было зафиксировано.

Так, в Joomla 3, фиксирующая линия:

  $option = ComponentDatabase::escape($option); 

В Joomla 2.5 фиксирующей линии было:

 $option = ComponentDatabase::getEscaped($option); 

А в Joomla 1.5? Как я могу правильно избежать параметра параметра и исправить функцию?

+0

Вы видите, что 'ComponentDatabase :: getEscaped' доступен вам самим? Или что эквивалентно в 1.5? Я ожидаю, что документы будут доступны для устаревших версий. – halfer

+0

Я сделал регулярный поиск в файлах Joomla 1.5, и я вижу, что 'getEscaped' доступен в одном компоненте, но я не знаю правильного синтаксиса, если он будет таким же, как версия 2.5 или нет. – ol30cean0

+0

например, другой файл того же компонента в Joomla 1.5 имеет '$ result = self :: $ _ dbo-> getEscaped ($ text, $ extra);' – ol30cean0

ответ

0

ComponentDatabase не является классом, принадлежащим Joomla по умолчанию, поэтому он принадлежит вашему компоненту.

getEscaped является, однако, функцией, принадлежащей Joomla 1.5, которая просто получает escape-строку из базы данных.

Предполагая, что ComponentDatabase также относится к совместимой версии этого компонента Joomla 1.5, должны должны быть в состоянии сделать то же самое, как и другие исправления:

$option = ComponentDatabase::getEscaped($option); 

Если ComponentDatabase не принадлежит к версии Joomla 1.5 компонент, затем скопируйте его из версии Joomla 2.5 (не 3.x) и не забывайте, что вам, возможно, придется немного подработать.

+0

yes, 'ComponentDatabase' принадлежит к версии компонента Joomla 1.5, и я вижу другие файлы с помощью' getEscaped', но некоторые из них имеют '$ this->' перед переменной, ну, я не являюсь programmer ... – ol30cean0

+0

, поэтому я просто скопирую '$ option = ComponentDatabase :: getEscaped ($ option);' внутри функции Joomla 1.5, и я должен быть в порядке, не так ли? – ol30cean0

+0

любым способом связаться с вами, чтобы сообщить вам точный код и имя компонента? – ol30cean0

Смежные вопросы