昨天在Joomla VEL已經宣佈了一個組件中的漏洞,爲了不傳播這些信息,我不想在這裏提到這個漏洞,我想修復這個漏洞。Joomla 1.5/2.5/3的MySQL注入漏洞
此漏洞也適用於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);
並且在1.5的Joomla?我如何正確地轉義選項參數並修復該功能?
你可以看看'ComponentDatabase :: getEscaped'是否可用嗎?或者1.5中的等價物是什麼?我希望文檔應該可用於舊版本。 – halfer 2014-09-19 17:12:17
我在Joomla 1.5文件中做了一個正則表達式搜索,並且我發現'getEscaped'可以在同一個組件中使用,但是我不知道正確的語法,如果它與2.5版本相同。例如, – ol30cean0 2014-09-19 17:13:49
,Joomla 1中同一組件的另一個文件。5版本具有'$ result = self :: $ _ dbo-> getEscaped($ text,$ extra);' – ol30cean0 2014-09-19 17:16:05