Несколько полезных советов, которые помогут защитить расширение
Итак для защиты своих расширений от SQL инъекций можно воспользоваться следующими простыми советами. Некоторые люди утверждают, что использование класса JRequest достаточно для этих целей, но по правде это далеко не так. В этой статье по порядку расписываются наиболее встречающиеся моменты.
Eсли используете переменную типа integer (целое или с плавающей точкой), делайте запросы вида:
$sql = 'UPDATE #__mytable SET `id` = ' . (int) $int;
Если нужно вставить дату, используйте
$date =& JFactory::getDate($mydate);
$sql = 'UPDATE #__mytable SET `date` = ' . $db->quote( $date->toMySQL(), false);
Всегда эскепируйте ваши строки
$sql = 'UPDATE #__mytable SET `string` = ' . $db->quote( $db->getEscaped( $string ), false );
Если вы используете в запросе LIKE, в котором присутствуют специальные символы % и _, то в методе $db-> getEscaped() есть второй параметр, которые может это контролировать.
$sql = 'UPDATE #__mytable SET .... WHERE `string` LIKE '.
$db->quote( $db->getEscaped( $string, true ), false );
Некоторые используют длы работы с переменными только один метод JRequest::getVar(), но существует множество других методов, которые гораздо лучше и помогут защитить расширение от XSS атак. Вот некоторые из них:
Для целых
$int = JRequest::getInt( $name, $default );
Для дробей
$float = JRequest::getFloat( $name, $default );
Для boolean
$bool = JRequest::getBool( $name, $default );
Для переменной типа "words" (альфа сиволы с использование символа _ )
$word = JRequest::getWord( $name, $default );
Для переменной типа "commands" (альфа символы с использованием номеров, . , - и _ )
$cmd = JRequest::getCMD( $name, $default );
Для не HTML текста (Все тэги HTML будут вырезаны)
$string = JRequest::getString( $name, $default );
Источник: Preventing SQL Injections
9
Комментарии
20.10.2014 23:10
Спасибо.
Хорошие советы для защиты от SQL иньекции
RSS лента комментариев этой записи