[英]MySQL injection vulnerability for Joomla 1.5/2.5/3
昨天,在Joomla VEL中已經宣布了一個組件中的漏洞,為了避免傳播此信息,我不想在此提及,並且我想修復此漏洞。
此漏洞也適用於組件的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中? 如何正確地轉義option參數並修復功能?
ComponentDatabase
在默認情況下不是屬於Joomla的類,因此它屬於您的組件。
但是getEscaped是Joomla 1.5的一個函數,它簡單地從數據庫中獲取轉義的字符串。
假設ComponentDatabase
也屬於該ComponentDatabase
的Joomla 1.5兼容版本,則應該能夠與其他修復程序相同:
$option = ComponentDatabase::getEscaped($option);
如果ComponentDatabase
不屬於該組件的Joomla 1.5版本,則將其從Joomla 2.5版本(不是3.x)復制過來,並記住您可能需要對其進行一些調整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.