一尘不染

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

sql

有人可以解释一下,如果不包括cfquerytype的cfsqltype仍然对SQL注入保护有用吗?以及带有cfsqltype和不带cfsqltype的cfqueryparam实际发生的情况。

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

<!--- with cfsqltype--->
<cfqueryparam value="#someValue#" cfsqltype="cf_sql_char">

阅读 131

收藏
2021-05-23

共1个答案

一尘不染

要了解likley到底是做什么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,但是传递了一个非整数值,那么如果您指定了cfsqltype,则ColdFusion可能在连接到数据库并发送查询之前引发了异常,但是没有它您浪费了数据库服务器上的数据库连接和执行时间。

2021-05-23