2008-09-05 22 views
23

Ich wurde damit beauftragt, eine Reihe von ColdFusion-Sites zu durchlaufen, die kürzlich Gegenstand eines ziemlich unangenehmen SQL-Injection-Angriffs waren. Grundsätzlich beinhaltet meine Arbeit das Hinzufügen von <cfqueryparam> Tags zu allen Inline-SQL. Zum größten Teil habe ich es verstanden, aber kann mir jemand sagen, wie man cfqueryparam mit dem LIKE-Operator benutzt?cfqueryparam mit like -Operator in ColdFusion

Wenn meine Abfrage sieht wie folgt aus:

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

was sollte mein <cfqueryparam> Tag aussehen?

Antwort

45

@Joel, muss ich nicht zustimmen.

select a,b,c 
from Foo 
where name like <cfqueryparam cfsqltype="columnType" value="%#variables.someName#%" /> 
  1. nie jemand vorschlagen, dass sie sollten "Stern wählen." Schlechte Form! Selbst für ein Beispiel! (Auch von der Frage kopiert!)

  2. Die Abfrage ist vorkompiliert und Sie sollten die Platzhalterzeichen als Teil des Parameters einfügen, der an die Abfrage übergeben wird. Dieses Format ist besser lesbar und wird effizienter ausgeführt.

  3. Verwenden Sie beim Verknüpfen von Strings den Ampersand-Operator (&), nicht das Pluszeichen. Technisch funktioniert Plus in den meisten Fällen gut ... bis Sie ein NumberFormat() in die Mitte der Zeichenfolge werfen und sich fragen, warum Ihnen gesagt wird, dass Sie keine gültige Zahl übergeben, wenn Sie dies überprüft haben und du bist.

+0

Vereinbaren Sie nicht die Auswahl *, aber ich war nur in der ursprünglichen Frage der Beispielabfrage entsprechen. –

+0

@Adam, heilige cr @ p das ist eine alte Antwort. Immer noch 100% richtig. Ich fand es sehr hilfreich. –

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

Dies ist im Wesentlichen die gleiche wie die bereits angenommene Antwort? –