Вчера в 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? Как я могу правильно избежать параметра параметра и исправить функцию?
Вы видите, что 'ComponentDatabase :: getEscaped' доступен вам самим? Или что эквивалентно в 1.5? Я ожидаю, что документы будут доступны для устаревших версий. – halfer
Я сделал регулярный поиск в файлах Joomla 1.5, и я вижу, что 'getEscaped' доступен в одном компоненте, но я не знаю правильного синтаксиса, если он будет таким же, как версия 2.5 или нет. – ol30cean0
например, другой файл того же компонента в Joomla 1.5 имеет '$ result = self :: $ _ dbo-> getEscaped ($ text, $ extra);' – ol30cean0