我有這樣的代碼在我的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。
我有這樣的代碼在我的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。
使用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();
出事。
看看JInput這corresponding documentation
過濾例如:
$jinput = JFactory::getApplication()->input;
$some_id = $jinput->get('someid', '', 'string');
+1雖然沒有必要進行消毒,但我同意艾琳的看法,這是一種很好的做法。另外,它非常重要,因爲@danronmoom提到過濾GET請求。使用JFactory而不是JRequest的好主意現在已經在3.0之後被棄用了。例如出錯。它應該是'jinput'而不是'input'。 – Tom
感謝您的糾正。 JInput最終將取代JRequest,而不是JFactory。本例中的$ jinput是一個JInput對象。我認爲明確的消毒是一種健康的習慣,即使Joomla默認這樣做是爲了降低新用戶的入門門檻(就像PHP使用magic_quotes_gpc自PHP 5.4起已經被刪除)。 – danronmoon
你確定Joomla的DB cla ss自動處理衛生處理?我會至少使用'$ db-> quote($ some_id)'來保證安全。請參閱http://forum.joomla.org/viewtopic.php?p=2674222 – danronmoon
如果您使用quote和quoteName,它將會轉義,除非您告訴它不要。你也可以隨時施放這些值,以確保它們是正確的類型,即。 (int)$ db-> quoteName($ some_id)。我認爲這是一個很好的做法,因爲你應該真正考慮所有數據不可信。 – Elin