使用javax.sql.DataSource
和<cfquery>
(或<cfqueryparam>
)时,ColdFusion(或者可能是JDBC)会在将原始SQL查询发送到MySQL服务器之前将其自己的字符串替换应用
如果冷却实现的ColdFusion服务器存在缺陷,这不如预准备语句有效,并且具有更大的SQL注入潜力。
Coldfusion调试和跟踪将使它看起来好像查询被处理为准备好的语句,但MySQL却以其他方式显示。
这可以通过记录sql查询来证明:
queryExecute
看着日志,
set global general_log=1;
日志应在查询中显示PREPARE语句和问号,而是日志显示完整查询,并将变量替换为问号。
当对{MySQL}数据库使用tail -f /var/lib/mysql/$(uname -n).log
和PREPARE
时,是否可以强制ColdFusion使用正确的<cfquery>
语句而不是字符串替换?如果它归结为JDBC连接字符串,则必须从默认设置更改为使用预准备语句。
我认为答案可能存在于某处:
答案 0 :(得分:1)
JDBC驱动程序的默认行为是根据https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html
设置useServerPrepStmts=false
将useServerPrepStmts=true
添加到Connection String
下的CFIDE(/cfide/administrator/enter.cfm
)中的JDBC Data & Services > Datasources
参数。