Как предотвратить внедрение SQL с ColdFusion - PullRequest
9 голосов
/ 07 апреля 2010

Как предотвратить внедрение SQL, когда речь идет о ColdFusion? Я довольно плохо знаком с языком / структурой.

Вот мой пример запроса.

<cfquery name="rsRecord" datasource="DataSource">
    SELECT * FROM Table
    WHERE id = #url.id#
</cfquery>

Я вижу переход в url.id как риск.

Ответы [ 5 ]

18 голосов
/ 07 апреля 2010

Используйте тег <cfqueryparam> для своего идентификатора:
http://www.adobe.com/livedocs/coldfusion/6.1/htmldocs/tags-b20.htm

<cfquery name="rsRecord" datasource="DataSource">
    SELECT * FROM Table
    WHERE id = 
     <cfqueryparam value = "#url.id#"
        CFSQLType = "CF_SQL_INTEGER">
</cfquery>
5 голосов
/ 07 апреля 2010
  • использовать параметризованную хранимую процедуру
  • cfqueryparam
  • обработка ошибок вокруг отдельного запроса
  • обработка ошибок для сайта через <cferror>
  • логика, ограничивающая количество запросов, поступающих с определенного IP в данный момент времени
  • убедитесь, что учетная запись пользователя базы данных имеет доступ только к определенным действиям, которые она должна
3 голосов
/ 19 марта 2014

В дополнение к cfqueryparam вы можете использовать cfparam в верхней части страницы, содержащей SQL для каждой передаваемой ему переменной. Это также помогает документации.

, например

<cfparam name="url.id" type="integer">

или более продвинутый:

<cfparam name="url.id" type="regex" pattern="\d" default="">

Поскольку шаблоны регулярных выражений разрешены, они могут быть чрезвычайно мощными:

<cfparam name="form.place" type="regex" pattern="[A-Z0-9]{1,6}|" default=""> 
       <!--- Upper case Alpa or Numeric, 1-6 characters or empty string --->

Также убедитесь, что вы используете cferror в своем application.cfm или application.cfc , чтобы предотвратить отображение таблицы запросов и имен столбцов.

0 голосов
/ 21 мая 2010

Использование cfqueryparam для предотвращения внедрения SQL - это хорошо.Но вы не можете использовать cachewithin в теге cfquery, если хотите использовать cfqueryparam.Еще один мой совет: просто сделайте это

Поместите это условие вверху вашей страницы.

В теге запроса используйте вот так:

WHERE ID = #Val (id) #

См. Также, как предотвратить: http://ppshein.wordpress.com/2008/08/28/block-ip-in-coldfusion/

0 голосов
/ 20 апреля 2010

Другой вариант - использовать хранимые процедуры (если база данных их поддерживает).

http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_r-s_22.html

...