微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

要了解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可能在连接到数据库并发送查询之前引发了异常,但是没有它您浪费了数据库服务器上的数据库连接和执行时间。

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。