1

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

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

  2. 如果可能发生 SQL 注入攻击,有没有办法运行它?

这个问题是cfquery中 Variable as SQL 的后续问题

4

1 回答 1

2

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

就#2而言,这是一个大问题,<cfquery>因为没有好的(或至少是明智的)减轻SQL注入的方法(当然也没有优化SQL的编译过程),因为参数化值的唯一方法在语句中是 via <cfqueryparam>,并且不能将它们嵌入到充满 SQL 的字符串中。这里的解决方案是使用Query.cfc(我不认为我推荐使用Query.cfc,因为它是 CFML 语言中实现最差的部分,IMO),因为可以在 SQL 字符串中指定位置参数或命名参数,并传递参数分别取值。

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

于 2013-07-14T10:48:10.730 回答