cfqueryparam com operador semelhante no ColdFusion
-
09-06-2019 - |
Pergunta
Recebi a tarefa de examinar vários sites do ColdFusion que recentemente foram alvo de um ataque bastante desagradável de injeção de SQL.Basicamente meu trabalho envolve adicionar <cfqueryparam
> tags para todo o sql embutido.Na maior parte do tempo eu entendi, mas alguém pode me dizer como usar o cfqueryparam com o operador LIKE?
Se minha consulta for assim:
select * from Foo where name like '%Bob%'
o que deveria ser meu <cfqueryparam
> tag se parece?
Solução
@Joel, tenho que discordar.
select a,b,c
from Foo
where name like <cfqueryparam cfsqltype="columnType" value="%#variables.someName#%" />
Nunca sugira a alguém que deve "selecionar estrela". Má forma!Até para dar um exemplo!(Até copiado da pergunta!)
A consulta é pré-compilada e você deve incluir os caracteres curinga como parte do parâmetro que está sendo passado para a consulta.Este formato é mais legível e funcionará com mais eficiência.
Ao fazer a concatenação de strings, use o operador E comercial (&), não o sinal de mais.Tecnicamente, na maioria dos casos, o plus funcionará perfeitamente...até que você jogue um NumberFormat() no meio da string e comece a se perguntar por que está sendo informado de que não está passando um número válido quando você verificou e está.
Outras dicas
select a,b,c
from Foo
where name like <cfqueryparam cfsqltype="cf_sql_varchar" value="%Bob%" />;