不包括cfqueryparam的cfsqltype对sql注入保护仍然有用吗?

Mik*_*nke 7 sql coldfusion sql-injection

有人解释如果不包括cfqueryparam的cfsqltype仍然对SQL注入保护有用吗?以及cfqueryparam与cfsqltype和w/o cfsqltype实际发生的情况.

<!--- without cfsqltype--->
<cfqueryparam value="#someValue#"> 

<!--- with cfsqltype--->
<cfqueryparam value="#someValue#" cfsqltype="cf_sql_char">  
Run Code Online (Sandbox Code Playgroud)

Pet*_*tag 11

为了更好地了解cfsqltype是如何做的,请查看Java/JDBC PreparedStatement类:http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

您将注意到各种setInt,setDate等方法 - 我的理解是cfsqltype在创建预准备语句时与相应的方法匹配.

如果指定了一个类型,那么ColdFusion需要能够将变量转换为该类型,如果不能,它会在将查询发送到数据库之前抛出异常.

省略cfsqltype时,它可能调用setObject或setString.接下来发生的事情的行为取决于您此时使用的JDBC驱动程序.我已经看到一些情况,即使你传入有效的变量,省略类型也会导致错误,我想到的是在MySQL上使用日期和日期时间.

另一件需要考虑的事情是,如果你省略了cfsqltype,我们说一个整数字段,但你传递一个非整数值,ColdFusion可能会在连接到数据库之前抛出异常并在你指定cfsqltype时发送查询但没有它您在数据库服务器上浪费数据库连接和执行时间.