Защита от злоумышленников в CMS Joomla |
Пользуясь классом JDatabaseQuery для составления запросов, не следует забывать и о защите от внесения злоумышленниками злонамеренного кода. Так, если значение, применяемое в операторе WHERE или ORDER BY, происходит из ненадежного источника, например, HTML-формы или URL (злоумышленники могут воспользоваться и тем и другим для внесения злонамеренного кода), это значение следует подвергнуть дополнительной обработке, прежде чем использовать его в запросе. И если значение в операторе WHERE должно быть целым, его следует непременно привести к целому с помощью оператора (int). В приведенном ниже примере заранее известно, что значение переменной $catid должно быть целым, и для этого принимаются специальные меры. $query->where('a.catid = ' . (int) $catid); Если же значение является текстом, для заключения его в кавычки и "экранирования" любых специальных символов следует воспользоваться методом Допустим, в операторе WHERE используется переменная $created_by, которая происходит из ненадежного источника. В таком случае в коде можно принять следующие меры защиты: $query->where('a.created_by_alias = ' . $db->quote($created_by)); Если злоумышленник попытается ввести злонамеренный код в переменной $created_ by, он будет обезврежен в методе quote (), обезопасив тем самым запрос. А если переменная используется в операторе WHERE вместе с метасимволом, необходимо принять меры к тому, чтобы правильно расположить кавычки. Допустим, в запрос требуется ввести следующий оператор WHERE: WHERE a.title LIKE '%abc%' где значение 'abc1 берется из введенной пользователем переменной $ search. В таком случае знаки процентов следует передать в качестве аргумента методу quote (), как показано ниже. $query->where('a.title LIKE ' . $db->quote('%' . $search . '%')); Таким образом, кавычки отделяются от знаков процентов, а значение переменной В тех случаях, когда ненадежные данные передаются оператору ORDER BY, необходимо убедиться в том, что передаваемые значения являются действительными именами столбцов. В противном случае в коде запроса SQL возникнет ошибка, способная раскрыть информацию о веб-сайте потенциальным злоумышленникам. Один из способов борьбы с подобными нарушениями защиты обсуждался в главе 10 и состоит в том, чтобы создать сначала массив действительных имен столбцов, а затем проверить введенные данные по этому списку имен. Понравился материал? Пригодилась информация? Плюсани в социалки!
|
Похожие новости | |