如何使用 ColdFusion 防止 SQL 注入

发布于 2024-08-28 08:13:49 字数 250 浏览 8 评论 0原文

ColdFusion 中如何防止 SQL 注入?我对这种语言/框架很陌生。

这是我的示例查询。

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

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

How do I prevent SQL injection when it comes to ColdFusion? I'm quite new to the language/framework.

Here is my example query.

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

I see passing in url.id as a risk.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

指尖凝香 2024-09-04 08:13:49

使用 标记作为您的 ID:
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>

Use a <cfqueryparam> tag for your id:
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>
末蓝 2024-09-04 08:13:49
  • 使用参数化存储过程
  • cfqueryparam
  • 单独查询
  • 错误处理,通过 逻辑对站点进行
  • 错误处理,该逻辑限制给定时间内来自特定 IP 的请求数量
  • ,确保仅数据库用户帐户有权访问它应该执行的特定操作
  • use a parameterized stored procedure
  • cfqueryparam
  • error handling around individual query
  • error handling for site via <cferror>
  • logic that limits the number of request that come from a specific IP in a given time
  • ensure the database user account only has access to the specific actions it should
一个人练习一个人 2024-09-04 08:13:49

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

例如

<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应用程序中使用 cferror。 cfc 以防止暴露您的查询表和列名称。

In addition to cfqueryparam you can use cfparam at the top of the page containing the SQL for each variable passed to it. This helps documentation also.

e.g.

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

or more advanced:

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

Since regular expression pattern are permitted, these can be extremely powerful:

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

Also make sure you use a cferror in your application.cfm or application.cfc to prevent exposing your query table and column names.

温馨耳语 2024-09-04 08:13:49

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

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

Another option is to use stored procedures (if you database supports them).

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

硪扪都還晓 2024-09-04 08:13:49

使用cfqueryparam对于防止SQL注入是有好处的。但是,如果您想使用 cfqueryparam,则不能在 cfquery 标记中使用 cachewithin。我的另一个建议是这样做

将此条件放在页面顶部。 <

CFIF IsDefined("id") AND NOT IsNumeric(id)>

在查询标记中,像这样使用:

WHERE ID = #Val(id)#

另请参阅如何防止:
http://ppshein.wordpress.com/2008/08 /28/block-ip-in-coldfusion/

Using cfqueryparam is for preventing SQL injection is good. But, you can't use cachewithin in cfquery tag if you want to use cfqueryparam. My another advice is do just like that

Put this condition at the top of your page.

<CFIF IsDefined("id") AND NOT IsNumeric(id)>
<cfabort showerror="Invalid Query String">
</CFIF>

In your query tag, use just like this:

WHERE ID = #Val(id)#

See also, how to prevent:
http://ppshein.wordpress.com/2008/08/28/block-ip-in-coldfusion/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文