如果我有一个带有 SQL 代码的变量,例如#PreserveSingleQuotes(arguments.sql)#
运行此代码的最佳方法是什么?
如果可能发生 SQL 注入攻击,有没有办法运行它?
这个问题是cfquery中 Variable as SQL 的后续问题
如果我有一个带有 SQL 代码的变量,例如#PreserveSingleQuotes(arguments.sql)#
运行此代码的最佳方法是什么?
如果可能发生 SQL 注入攻击,有没有办法运行它?
这个问题是cfquery中 Variable as SQL 的后续问题
#1 是一个有趣的问题,因为你手头没有很多选择。从 ColdFusion 的角度来看,您可以通过<cfquery>
或通过运行它Query.cfc
。或者,数据库系统将能够获取包含 SQL 的字符串并执行它,但这实际上只是将问题从 CF 稍微抽象到数据库。我不确定还有其他选择。
就#2而言,这是一个大问题,<cfquery>
因为没有好的(或至少是明智的)减轻SQL注入的方法(当然也没有优化SQL的编译过程),因为参数化值的唯一方法在语句中是 via <cfqueryparam>
,并且不能将它们嵌入到充满 SQL 的字符串中。这里的解决方案是使用Query.cfc
(我不认为我推荐使用Query.cfc
,因为它是 CFML 语言中实现最差的部分,IMO),因为可以在 SQL 字符串中指定位置参数或命名参数,并传递参数分别取值。
最后,您应该始终将值作为参数传递,而不是在 SQL 语句中手动编码它们,如果这意味着不为 SQL 语句使用预先创建的字符串,那就这样吧。