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

标签 sql coldfusion sql-injection

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

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

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

最佳答案

要了解 cfsqltype 在幕后所做的工作,请查看 Java/JDBC PreparedStatement 类:http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html
你会注意到各种 setInt , setDate等方法 - 我的理解是 cfsqltype在创建prepared statement时与相应的方法匹配。
如果您指定了一个类型,那么 ColdFusion 需要能够将变量转换为该类型,如果不能,它将在将查询发送到数据库之前抛出异常。
当您省略 cfsqltype它可能会调用 setObjectsetString .接下来发生的行为取决于您此时使用的 JDBC 驱动程序。我见过一些情况,即使您传入有效变量,省略类型也会导致错误,想到的一种情况是在 MySQL 上使用日期和日期时间。
要考虑的另一件事是,如果您省略 cfsqltype假设一个整数字段,但您传递了一个非整数值,如果您指定 cfsqltype,ColdFusion 可能在连接到数据库并发送查询之前抛出异常。 ,但是没有它,您会浪费数据库服务器上的数据库连接和执行时间。

关于sql - 不包括 cfqueryparam 的 cfsqltype 对 sql 注入(inject)保护仍然有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913696/

相关文章:

php - SELECT查询, ""为空时WHERE全选

excel - 格式为excel时coldfusion cfreport错误

coldfusion - 计划任务停止运行

php - sprintf() 如何防止 SQL 注入(inject)?

mysql - 前 n 条记录的平均值?

SQL 连接排序和限制结果

php - 如何在不使用 PDO 的情况下改进 PHP 清理

php - 如何防止 SQL 注入(inject)更改 URL 参数(DELETE 语句)PHP

mysql - 如何返回连接表中所有不匹配的行,如果匹配则检查条件?

Coldfusion 2016 运行一些代码 3 次