如何使用ColdFusion阻止SQL注入

时间:2010-04-07 13:19:46

标签: sql security coldfusion sql-injection

在ColdFusion方面,如何防止SQL注入?我对语言/框架很陌生。

这是我的示例查询。

<cfquery name="rsRecord" datasource="DataSource">
    SELECT * FROM Table
    WHERE id = #url.id#
</cfquery>

我认为传递url.id是一种风险。

5 个答案:

答案 0 :(得分:18)

为您的ID使用<cfqueryparam>标记:
http://www.adobe.com/livedocs/coldfusion/6.1/htmldocs/tags-b20.htm

<cfquery name="rsRecord" datasource="DataSource">
    SELECT * FROM Table
    WHERE id = 
     <cfqueryparam value = "#url.id#"
        CFSQLType = "CF_SQL_INTEGER">
</cfquery>

答案 1 :(得分:5)

  • 使用参数化存储过程
  • cfqueryparam
  • 围绕个别查询的错误处理
  • 通过<cferror>
  • 对网站进行错误处理
  • 限制在给定时间内来自特定IP的请求数的逻辑
  • 确保数据库用户帐户只能访问应该执行的特定操作

答案 2 :(得分:3)

cfqueryparam 外,您还可以在页面顶部使用 cfparam ,其中包含传递给它的每个变量的SQL。这也有助于记录。

e.g。

<cfparam name="url.id" type="integer">

或更高级:

<cfparam name="url.id" type="regex" pattern="\d" default="">

由于允许使用正则表达式模式,因此这些模式非常强大:

<cfparam name="form.place" type="regex" pattern="[A-Z0-9]{1,6}|" default=""> 
       <!--- Upper case Alpa or Numeric, 1-6 characters or empty string --->

另外,请确保在 application.cfm application.cfc 中使用cferror,以防止泄露查询表和列名。

答案 3 :(得分:0)

另一种选择是使用存储过程(如果数据库支持它们)。

http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_r-s_22.html

         

答案 4 :(得分:0)

使用cfqueryparam是为了防止SQL注入是好的。但是,如果要使用cfqueryparam,则不能在cfquery标记中使用cachewithin。我的另一个建议就是这样做

将此条件置于页面顶部。

&lt; CFIF IsDefined(“id”)AND NOT IsNumeric(id)&gt;  &lt; cfabort showerror =“无效的查询字符串”&gt; &LT; / CFIF&GT;

在您的查询代码中,使用如下:

WHERE ID = #Val(id)#

另见,如何预防: http://ppshein.wordpress.com/2008/08/28/block-ip-in-coldfusion/