Good catch Charlie... guess my morning coffee hadn't kicked in yet!
Parameterization doesn't actually escape anything. It forces the DB
to parse the query independently of the data, produce an execution
plan and then plug the data in at runtime. Since the execution plan
exists it cannot be changed by the data.
This gets back to a discussion we just had elsewhere... the context
below is using queries w/o cfqueryparam:
<snip>
Unless you use preserveSingleQuotes() for string values in a query CF
will automatically handle quote escaping for you. So that mitigates
SQL injection in this instance.
Numeric values are subject to SQL injection and should always be
parameterized or simply validated as numeric.
Queries should never be built outside of <cfquery> to ensure
automatic string escaping. In other words, don't build the query as
a string and then do <cfquery>#myQuery#</cfquery>, this will most
likely be subject to injection. Additionally, string values from the
user should never be placed directly into the query when they are not
surrounded by quotes (e.g. [...] WHERE #form.where_clause#) since
these will obviously not be escaped by CF. Use the pattern of
indirection instead.
All in all, CF is much more secure from a SQL Injection perspective
than most programming languages when programmed well. That doesn't
mean you should stop using <cfqueryparam>, however, since it does
confer some performance benefits.
</snip>
Dean H. Saxe, CISSP, CEH
[EMAIL PROTECTED]
"I have always strenuously supported the right of every man to his
own opinion, however different that opinion might be to mine. He who
denies another this right makes a slave of himself to his present
opinion, because he precludes himself the right of changing it."
-- Thomas Paine, 1783
On Jul 27, 2007, at 10:14 AM, Charlie Arehart wrote:
Yes, this is an unfortunate misunderstanding, but I do think I know
where
Vivek may have been going, and it's worth discussing.
If the value being used in the CFQUERYPARAM is other than a string
(like a
number), then it could make sense to think that if one is doing the
query in
a CFFUNCTION and sets a datatype for the variable coming in as a
CFARGUMENT,
then that will provide the protection against non-numeric data
trying to be
appended in the value.
I wouldn't go so far, though, as to say then that "you don't need
CFQUERYPARAM", since it still has other benefits in causing CF to
send a
"prepared statement" which should perform better if you send more
requests
that would reuse it.
But this thinking does not apply for strings: I'm pretty sure the
validation
of CFQUERYPARAM for cfsqltype="CF_SQL_CHAR" does more than just
ensure "it's
a string". I think it escapes single quotes and more, which I don't
think
the CFARGUMENT datatype protection will do. Anyone know more?
/charlie
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Dean H.
Saxe
Sent: Friday, July 27, 2007 8:40 AM
To: [email protected]
Subject: Re: [ACFUG Discuss] cfqueryparam in a sort
How does that provide any security? Unless you validate the data,
you are
subject to SQL injection.
Dean H. Saxe, CISSP, CEH
[EMAIL PROTECTED]
"Great spirits have often encountered violent opposition from weak
minds."
--Einstein
On Jul 27, 2007, at 8:20 AM, vivek khosla wrote:
The other way is to use cffunction in a cfc and passing the order by
as varchar/string in cfargument, this will provide security as well
performance.
<cfargument name="parameterName" type="dataType"
required="true/false" default="defaultValue">
Rgds
Vivek Khosla
-------------------------------------------------------------
Annual Sponsor FigLeaf Software - http://www.figleaf.com
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 http://www.fusionlink.com
-------------------------------------------------------------
-------------------------------------------------------------
Annual Sponsor FigLeaf Software - http://www.figleaf.com
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 http://www.fusionlink.com
-------------------------------------------------------------