cfquery中使用SQL的变量的最佳实践

时间:2013-07-14 06:15:34

标签: sql coldfusion

如果我有一个带有SQL代码的变量,例如#PreserveSingleQuotes(arguments.sql)#

  1. 运行此代码的最佳方法是什么?

  2. 如果可以进行SQL注入攻击,有没有办法运行?

  3. 这个问题是对Variable as SQL in cfquery

    的跟进

1 个答案:

答案 0 :(得分:2)

#1是一个有趣的问题,因为你手头没有很多选择。从ColdFusion的角度来看,您可以通过<cfquery>Query.cfc运行它。或者,DB系统将能够获取包含SQL的字符串并执行它,但这实际上只是将问题从CF略微抽象到数据库。我不确定还有其他选择。

就#2而言,使用<cfquery>时这是一个很大的问题,因为没有好的(或至少是明智的)缓解SQL注入的方式(当然也没办法优化SQL的编译过程),因为在语句中参数化值的唯一方法是通过<cfqueryparam>,并且不能将那些嵌入到充满SQL的字符串中。这里的解决方案是使用Query.cfc(我不相信我建议使用Query.cfc,因为它是关于CFML语言(IMO)中执行最差的部分,因为可以指定位置或命名SQL字符串中的参数,并分别传递参数值。

最后,您应该始终将值作为参数传递,而不是在SQL语句中对它们进行手工编码,如果这意味着不为SQL语句使用预先创建的字符串,那么就这样吧。