cfqueryparam с оператором like в ColdFusion
Мне было поручено пройти через несколько сайтов ColdFusion, которые недавно стали объектом довольно неприятной атаки SQL-инъекций. В основном моя работа включает в себя добавление <cfqueryparam
> теги ко всем встроенным sql. По большей части я справился, но кто-нибудь может сказать мне, как использовать cfqueryparam с оператором LIKE?
Если мой запрос выглядит так:
select * from Foo where name like '%Bob%'
что мой <cfqueryparam
> тег похож?
2 ответа
@ Джоэл, я должен не согласиться.
select a,b,c
from Foo
where name like <cfqueryparam cfsqltype="columnType" value="%#variables.someName#%" />
Никогда не предлагайте кому-то, чтобы они "выбрали звезду". Плохой тон! Даже для примера! (Даже скопировал с вопроса!)
Запрос предварительно скомпилирован, и вы должны включить подстановочный знак (символы) как часть параметра, передаваемого в запрос. Этот формат более читабелен и будет работать более эффективно.
При объединении строк используйте оператор амперсанда (&), а не знак плюс. Технически, в большинстве случаев, плюс будет работать просто отлично... пока вы не бросите NumberFormat() в середине строки и не начнете удивляться, почему вам говорят, что вы не передаете действительное число, когда проверили и вы.
select a,b,c
from Foo
where name like <cfqueryparam cfsqltype="cf_sql_varchar" value="%Bob%" />;