Yes, Seth, technically you are correct. But there is a better way here. Instead of passing the sort column name directly from the user, send a proxy value for the order by clause. In other words, identify the different order by clauses by numeric value, 1, 2, 3, 4, etc. In the query you would include a <cfswitch> and the cases would be the different numeric values. These would then define what the ORDER by value would be.

No more SQL injection and no need to much around with <cfqueryparam> here, either.

-dhs

Dean H. Saxe, CISSP, CEH
[EMAIL PROTECTED]
"Great spirits have often encountered violent opposition from weak minds."
    --Einstein


On Jul 23, 2007, at 4:46 PM, Tepfer, Seth wrote:

Aren’t dynamic ORDER BY variables just as susceptible to SQL injection as WHERE clauses?



From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Charlie Arehart
Sent: Monday, July 23, 2007 4:43 PM
To: [email protected]
Subject: RE: [ACFUG Discuss] cfqueryparam in a sort



OK, as I had surmised, you're using the CFQueryParam in the SORT itself. I know this "works" (doesn't give an error, in 7 or before), but it doesn't do what you want, right? I ran a test against 7 and found, as you did, that it did not sort. But guess what, it fails entirely in CF8 (complaining that there is a ? in the SORT). That's what I'd suspect, really. CFQUERYPARAM is intended for use in a WHERE clause value. From the CFML reference, regarding the VALUE attribute, it should be a "value that ColdFusion passes to the right of the comparison operator in a where clause."



Indeed, there are two main purposes for this tag: one is to help prevent SQL injection, and the other is to cause a bind variable (or parameterized query) to be passed to the DB. That's what the ? is about. I suppose some database drivers out there may accept a bind variable for a column name, but I'm guessing it will be hit and miss. I've found references that suggest that they're intended just for literals, not DB objects (tables, columns, etc.) Again, perhaps it's worked for some.



Anyone have more specific experience?



/charlie





From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Small, Lewis B.
Sent: Monday, July 23, 2007 2:45 PM
To: Charlie Arehart; [email protected]
Subject: RE: [ACFUG Discuss] cfqueryparam in a sort

<cfquery name="Recordset" datasource="db1">

                SELECT * From Sheet1 where

                                number = number

                                <cfif myFname is not "">

AND fname like <cfqueryparam value="%#myFname#%" cfsqltype="CF_SQL_VARCHAR" maxlength="30">

                                </cfif>

                                <cfif myLname is not "">

AND lname like <cfqueryparam value="%#Lname#%" cfsqltype="CF_SQL_VARCHAR" maxlength="30">

                                </cfif>

                                <cfif myDepartment is not "">

AND dept like <cfqueryparam value="#myDepartment#" cfsqltype="CF_SQL_VARCHAR" maxlength="30">

                                </cfif>

                                <cfif myType is not "">

AND type like <cfqueryparam value="#myType#" cfsqltype="CF_SQL_VARCHAR" maxlength="30">

                                </cfif>

                                <cfif myOcbar is not "">

AND ocbar like <cfqueryparam value="%#myOcbar#%" cfsqltype="CF_SQL_VARCHAR" maxlength="30">

                                </cfif>

                                <cfif myRadio is not "">

                                                ORDER BY

<cfqueryparam value="#myRadio#" cfsqltype="CF_SQL_VARCHAR" maxlength="30"> ASC

                                </cfif>

</cfquery>



From: Charlie Arehart [mailto:[EMAIL PROTECTED]
Sent: Monday, July 23, 2007 1:42 PM
To: [email protected]
Cc: Small, Lewis B.
Subject: RE: [ACFUG Discuss] cfqueryparam in a sort



Seth, it may help to show your SQL so we know for sure what you're asking. I can't see how using CFQUERYPARAM for the value of a WHERE clause would affect in any way an ability to SORT. Now, are you sorting in the same CFQUERY using the CFQUERYPARAM? Or might this be a Query of Query sort of that previous CFQUERY?



/charlie





From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Tepfer, Seth
Sent: Monday, July 23, 2007 12:28 PM
To: [email protected]
Cc: Small, Lewis B.
Subject: [ACFUG Discuss] cfqueryparam in a sort

We have an MSAccess db, and have a dynamic sort with cfqueryparam.



When I use the actual field (fname), the query sorts correctly. When I use the cfqueryparam, it does not sort – even though the debug says the field fname was sent correctly.



Does cfqueryparam make sort not work?

Thanks

seth


-------------------------------------------------------------
Annual Sponsor - Figleaf Software

To unsubscribe from this list, manage your profile @
http://www.acfug.org?fa=login.edituserform

For more info, see http://www.acfug.org/mailinglists
Archive @ http://www.mail-archive.com/discussion%40acfug.org/
List hosted by FusionLink
-------------------------------------------------------------


-------------------------------------------------------------
Annual Sponsor - Figleaf Software

To unsubscribe from this list, manage your profile @
http://www.acfug.org?fa=login.edituserform

For more info, see http://www.acfug.org/mailinglists
Archive @ http://www.mail-archive.com/discussion%40acfug.org/
List hosted by FusionLink
-------------------------------------------------------------
-------------------------------------------------------------
Annual Sponsor - Figleaf Software

To unsubscribe from this list, manage your profile @
http://www.acfug.org?fa=login.edituserform

For more info, see http://www.acfug.org/mailinglists
Archive @ http://www.mail-archive.com/discussion%40acfug.org/
List hosted by FusionLink
-------------------------------------------------------------

Reply via email to