Pregunta

Se me ha encomendado la tarea de revisar 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 <cfqueryparam> etiquetas a todos los sql en línea.En su mayor parte lo tengo controlado, pero ¿alguien puede decirme cómo usar cfqueryparam con el operador LIKE?

Si mi consulta se ve así:

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

¿Cuál debería ser mi <cfqueryparam> ¿Se ve la etiqueta?

¿Fue útil?

Solución

@Joel, no estoy de acuerdo.

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

  2. La consulta está precompilada 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 comercial (&), no el signo más.Técnicamente, en la mayoría de los casos, plus funcionará bien...hasta que lanzas un NumberFormat() en el medio de la cadena y comienzas a preguntarte por qué te dicen que no estás pasando un número válido cuando lo has verificado y así es.

Otros consejos

select a,b,c
from  Foo
where name like  <cfqueryparam cfsqltype="cf_sql_varchar" value="%Bob%" />;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top