2008-09-05 4 views
23

Мне поручено пройти через несколько сайтов ColdFusion, которые недавно были предметом довольно неприятной атаки SQL Injection. В основном моя работа включает в себя добавление <cfqueryparam> тегов ко всем встроенным sql. По большей части я получил его, но может ли кто-нибудь сказать мне, как использовать cfqueryparam с оператором LIKE?cfqueryparam с аналогичным оператором в ColdFusion

Если мой запрос выглядит следующим образом:

select * from Foo where name like '%Bob%' 

что должно мой <cfqueryparam> тег выглядит?

ответ

45

@Joel, я должен не согласиться.

select a,b,c 
from Foo 
where name like <cfqueryparam cfsqltype="columnType" value="%#variables.someName#%" /> 
  1. Никогда не предложить кому-то, что они должны "выбрать звезду." Плохой тон! Даже для примера! (Даже скопирован из вопроса!)

  2. Запрос предварительно скомпилирован, и вы должны указать символ (-ы) дикой карты как часть передаваемого в запрос параметра. Этот формат более читабельн и будет работать более эффективно.

  3. При выполнении конкатенации строк используйте оператор амперсанда (&), а не знак плюса. Технически, в большинстве случаев, плюс будет работать отлично ... пока вы не выкинете NumberFormat() в середине строки и не начнете задаваться вопросом, почему вам говорят, что вы не передаете действительный номер, когда вы проверили и вы.

+0

Согласуйте не выбирая *, но я просто соответствие запроса образца в исходном вопросе. – 2008-09-10 14:58:01

+0

@Adam, святой cr @ p, это старый ответ. Тем не менее, 100% правильно. Я просто нашел это очень полезным. – 2011-09-19 16:07:35

-1
select a,b,c 
from Foo 
where name like <cfqueryparam cfsqltype="cf_sql_varchar" value="%Bob%" />;