Защита от SQL-инъекций для динамических запросов - PullRequest
1 голос
/ 09 июня 2010

Типичные средства контроля за недостатками внедрения SQL - это использование переменных связывания (тег cfqueryparam), проверка строковых данных и обращение к хранимым процедурам для фактического уровня SQL.Это все хорошо, и я согласен, однако, что, если сайт является устаревшим, и он имеет много динамических запросов.Затем переписывание всех запросов является очень сложной задачей и требует длительного периода регрессии и тестирования производительности.Я думал об использовании динамического фильтра SQL и вызывал его до вызова cfquery для фактического выполнения.

Я нашел один фильтр в CFLib.org (http://www.cflib.org/udf/sqlSafe):

<cfscript>
/**
* Cleans string of potential sql injection.
*
* @param string      String to modify. (Required)
* @return Returns a string.
* @author Bryan Murphy (bryan@guardianlogic.com)
* @version 1, May 26, 2005
*/
function metaguardSQLSafe(string) {
var sqlList = "-- ,'";
var replacementList = "#chr(38)##chr(35)##chr(52)##chr(53)##chr(59)##chr(38)##chr(35)##chr(52)##chr(53)##chr(59)# , #chr(38)##chr(35)##chr(51)##chr(57)##chr(59)#";

return trim(replaceList( string , sqlList , replacementList ));
}
</cfscript>

Кажется, это довольно простой фильтр, и я хотел бы знать, есть ли способы улучшить его или найти лучшее решение?

Ответы [ 4 ]

9 голосов
/ 09 июня 2010

что если сайт является устаревшим и это показывает много динамических запросов. Затем переписать все запросы геркулесова задача, и это требует длительный период регрессии и тестирование производительности.

Да, но это так, если вы выполните любые значительные изменения, в том числе с помощью функции, подобной той, которую вы предлагаете.

Так что я бы по-прежнему рекомендовал настроить некоторые тесты, сделать рефакторинг для использования разумной структуры, а затем исправить запросы для использования cfqueryparam.

Эта конкретная функция - куча бессмыслицы, которая не делает то, что, как она заявляет, делает и может сломать материал (неправильно превысив максимальную длину).

Все, что он делает, это превращает -- в &#45;&#45; и ' в &#39; - это не защита от SQL-инъекций!

Так что, да, если вы все еще хотите пойти по этому пути, найдите другую функцию, но я бы порекомендовал правильный рефакторинг.

3 голосов
/ 09 июня 2010

Очевидно, у вас впереди много работы. Но когда вы закатываете рукава, одна маленькая вещь, которую вы можете сделать, чтобы уменьшить потенциальный ущерб от инъекционных атак, состоит в создании нескольких источников данных и выполнении всех ваших запросов select only через источник данных, ограниченный только операторами select , И для всех источников данных убедитесь, что такие вещи, как grant, revoke, create, alter и drop, отключены.

0 голосов
/ 03 августа 2010
0 голосов
/ 11 июня 2010

Вы можете попробовать Portcullis .Это CFC с открытым исходным кодом, который можно использовать для сканирования областей URL, FORM и COOKIE на наличие SQL-инъекций и атак XSS.Это не будет гарантированной защитой, но по крайней мере обеспечит некоторую защиту сегодня без особых усилий, пока вы работаете над переписыванием запросов.Приятно то, что он может быть включен в Application.cfm / cfc для сканирования областей при каждом запросе страницы CF стоимостью около 4 строк кода.

...