首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Joomla1.5/2.5/3的MySQL注入漏洞

Joomla1.5/2.5/3的MySQL注入漏洞
EN

Stack Overflow用户
提问于 2014-09-19 17:03:54
回答 1查看 829关注 0票数 0

昨天在Joomla VEL已经宣布了一个组件中的漏洞,为了不传播这些信息,我不想在这里提到这个漏洞,我想修复这个漏洞。

此漏洞也适用于组件的Joomla1.5版本,但组件团队只修复了Joomla2.5和3.x版本中的漏洞。我将在这里发布在Joomla 2.5和Joomla 3中修改的函数,我想知道是否可以以相同的方式或以不同的方式修改相同的函数,以便与Joomla 1.5版本兼容。

在下面的示例中,请考虑我将编辑代码以删除组件的名称。

所以,Joomla 3的最初功能是:

代码语言:javascript
复制
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}'");

这一问题已按以下方式加以解决:

代码语言:javascript
复制
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中,最初的职能是:

代码语言:javascript
复制
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}'");

这一问题已按以下方式加以解决:

代码语言:javascript
复制
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中,最初的功能是:

代码语言:javascript
复制
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中,固定线是:

代码语言:javascript
复制
            $option = ComponentDatabase::escape($option);

在Joomla 2.5,固定线是:

代码语言:javascript
复制
        $option = ComponentDatabase::getEscaped($option);

那在Joomla 1.5呢?如何正确地转义选项参数并修复该函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-19 17:12:41

默认情况下,ComponentDatabase不是属于Joomla的类,因此它属于您的组件。

然而,getEscaped是一个属于Joomla1.5的函数,它简单地从数据库中获取一个转义字符串。

假设ComponentDatabase也属于这个组件的Joomla1.5兼容版本,那么应该能够与其他修补程序进行相同的操作:

代码语言:javascript
复制
$option = ComponentDatabase::getEscaped($option);

如果ComponentDatabase不属于组件的Joomla1.5版本,那么从Joomla2.5版本(而不是3.x版本)复制它,并考虑到您可能需要对它做一些调整。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25939006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档