2008-09-05 10 views
23

Me han encomendado la tarea de visitar varios sitios de ColdFusion que recientemente han sido objeto de un ataque de inyección SQL bastante desagradable. Básicamente, mi trabajo consiste en agregar etiquetas <cfqueryparam> a todos los sql en línea. En su mayor parte, lo he bajado, pero ¿alguien puede decirme cómo usar cfqueryparam con el operador LIKE?cfqueryparam con el operador like en ColdFusion

Si mi consulta es la siguiente:

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

lo que debería decir a mi <cfqueryparam> etiqueta parece?

Respuesta

45

@Joel, tengo que estar en desacuerdo.

select a,b,c 
from Foo 
where name like <cfqueryparam cfsqltype="columnType" value="%#variables.someName#%" /> 
  1. Nunca sugieren a alguien que deben "seleccionar estrella". ¡Mala forma! ¡Incluso por un ejemplo! (¡Incluso copiado de la pregunta!)

  2. La consulta se precompila y debe incluir los caracteres comodín como parte del parámetro que se pasa a la consulta. Este formato es más legible y se ejecutará de manera más eficiente.

  3. Al realizar la concatenación de cadenas, utilice el operador de y comercial (&), no el signo más. Técnicamente, en la mayoría de los casos, plus funcionará bien ... hasta que arrojes un NumberFormat() en el medio de la cadena y comiences a preguntarte por qué te dicen que no estás pasando un número válido cuando lo has marcado y usted es.

+0

Acordar no seleccionar *, pero estaba concuerden con la consulta de ejemplo en la pregunta original. –

+0

@ Adam, holy cr @ p esta es una respuesta antigua. Sin embargo, es 100% correcto. Lo encontré muy útil. –

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

¿Esto es esencialmente lo mismo que la respuesta ya aceptada? –

Cuestiones relacionadas