2010-12-18 1 views
2

Ich verwende die folgende Technik, um sicherzustellen, dass jede Sortierspalte params vom Client kommt eine ListFindNoCase() Funktion durchlaufen:Kann CFSWITCH die SQL-Injektion verhindern, wenn sie für eine Sortierspalte verwendet wird?

<cfif ListFindNoCase("date,score", params.order) EQ 0> 
    <cfset params.order = "date"> 
</cfif> 

Auf diese Weise jede Sortierspalte Antrag gegen die Listenwerte überprüft wird, bevor sie gesendet werden der Server. Ich habe dann den folgenden Code in meiner Funktion:

<cfswitch expression="#params.order#"> 
    <cfcase value="date"> 
     <cfset params.order = "date DESC"> 
    </cfcase> 
    <cfcase value="score"> 
     <cfset params.order = "score ASC"> 
    </cfcase> 
    <cfdefaultcase> 
     <cfset params.order = "date DESC"> 
    </cfdefaultcase> 
</cfswitch> 

Da Standardfall wird immer gesetzt, um „Datum DESC“, wenn der Ausdruck nicht die ersten beiden Fälle übereinstimmt, nicht, dass machen ListCaseNoFind() überflüssig?

Ich wollte sicherstellen, dass dies der Fall ist, bevor ich die ListFindNoCase() -Funktion entfernt habe!

Antwort

5

Sicher, das ist sicher. Sie schreiben die Reihenfolge fest, sodass keine Möglichkeit besteht, dass Fremd-SQL injiziert werden kann.

+1

Dies gilt auch als "White-Listing", die sicher ist. –

Verwandte Themen