2013-01-08 87 views
1

我有這樣的代碼在我的Joomla插件:清理輸入中的Joomla

$some_id = $_GET["someid"]; 

$db = JFactory::getDBO(); 
$db->setQuery("SELECT * FROM #__table WHERE id = '$some_id'"); 

$result = $db->loadRow(); 

的Joomla是否自動消毒這一點,或者我需要做什麼(什麼)消毒此查詢?使用Joomla 2.5。

回答

2

使用Joomla時無需清理數據庫查詢。您要下拉的信息是放在那裏或已經存在的信息,因此您不想更改。我也建議使用Joomla 2.5編碼標準,使數據庫查詢,像這樣:

$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 
$query->select($db->quoteName('*')) 
     ->from($db->quoteName('#__table')) 
     ->where($db->quoteName('id') . ' = ' . $db->quote($some_id)); 
$db->setQuery($query); 
$rows = $db->loadRow(); //or loadResult() 

我都需要消毒(這麼說)唯一的一次處理文件時,在這種情況下,我用JFile::makeSafe();出事。

+0

你確定Joomla的DB cla ss自動處理衛生處理?我會至少使用'$ db-> quote($ some_id)'來保證安全。請參閱http://forum.joomla.org/viewtopic.php?p=2674222 – danronmoon

+1

如果您使用quote和quoteName,它將會轉義,除非您告訴它不要。你也可以隨時施放這些值,以確保它們是正確的類型,即。 (int)$ db-> quoteName($ some_id)。我認爲這是一個很好的做法,因爲你應該真正考慮所有數據不可信。 – Elin

1

看看JInput這corresponding documentation

過濾例如:

$jinput = JFactory::getApplication()->input; 
$some_id = $jinput->get('someid', '', 'string'); 
+0

+1雖然沒有必要進行消毒,但我同意艾琳的看法,這是一種很好的做法。另外,它非常重要,因爲@danronmoom提到過濾GET請求。使用JFactory而不是JRequest的好主意現在已經在3.0之後被棄用了。例如出錯。它應該是'jinput'而不是'input'。 – Tom

+0

感謝您的糾正。 JInput最終將取代JRequest,而不是JFactory。本例中的$ jinput是一個JInput對象。我認爲明確的消毒是一種健康的習慣,即使Joomla默認這樣做是爲了降低新用戶的入門門檻(就像PHP使用magic_quotes_gpc自PHP 5.4起已經被刪除)。 – danronmoon