cfqueryparam с оператором Like в ColdFusion
-
09-06-2019 - |
Вопрос
Мне было поручено просмотреть ряд сайтов ColdFusion, которые недавно стали объектом довольно опасной атаки с использованием SQL-инъекции.В основном моя работа заключается в добавлении <cfqueryparam
> теги для всех встроенных sql.По большей части я это понял, но может ли кто-нибудь сказать мне, как использовать cfqueryparam с оператором LIKE?
Если мой запрос выглядит так:
select * from Foo where name like '%Bob%'
что должен мой <cfqueryparam
> тег выглядит?
Решение
@ Джоэл, я должен не согласиться.
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%" />;