Как переопределить санитизацию SQL в ColdFusion

Я решил эту проблему (для моего случая), убедившись, что содержащие элементы пользовательского интерфейса отображают до диаграммы, позволяя Highcharts вычислять правильную ширину.

Например:

До:

var renderChart = function(){
...
};
renderChart();

После:

var renderChart = function(){
...
};
setTimeout(renderChart, 0);
5
задан Peter Boughton 2 June 2009 в 17:40
поделиться

3 ответа

ColdFusion не исключает всех одинарных кавычек, а только тех, которые поступают в запрос через интерполяцию переменных. Это преступник:

SELECT #Arguments.strSelectAttributes#

Обычно это полезная вещь и небольшая линия защиты от атак SQL-инъекций. Итак, правило номер один (здесь и везде): не создавайте строку SQL из переменных.

Если вы обязательно должны использовать переменные для построения строки SQL, несмотря на все возможные негативные эффекты, используйте функцию PreserveSingleQuotes () :

SELECT #PreserveSingleQuotes(Arguments.strSelectAttributes)#

Эта функция останавливает ColdFusion от автоматическое экранирование одинарных кавычек.

И любой другой вызов функции, кстати, делает то же самое. Попробуйте:

SELECT #LCase(Arguments.strSelectAttributes)#

, что означает, что PreserveSingleQuotes () на самом деле просто бездействие, которое превращает строку в результат функции,

17
ответ дан 18 December 2019 в 07:31
поделиться

Поместите вызов preserveSingleQuotes () вокруг вашей переменной. Он создан специально для написания динамического SQL. Кроме того, вы действительно должны использовать cfqueryparam для своих значений, и я надеюсь, что вы каким-то образом дезинфицируете свой ввод, чтобы arguments.strSelectAttributes не мог содержать что-то вроде '; drop table groups; в нем.

<cfquery name="getObjectInfo" datasource="#Application.DataSource#">
  SELECT #preserveSingleQuotes(Arguments.strSelectAttributes)#
  FROM   Groups
  WHERE  Group_ID = <cfqueryparam value="#Arguments.intGroupID#" cfsqltype="cf_sql_integer"/>
</cfquery>
7
ответ дан 18 December 2019 в 07:31
поделиться

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

-3
ответ дан 18 December 2019 в 07:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: