加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

如何在ColdFusion中覆盖SQL清理

发布时间:2021-03-15 12:35:57 所属栏目:MsSql教程 来源:网络整理
导读:我有一个不幸的任务,清理一堆旧的ColdFusion代码.查询到处都是,我正在努力将它们全部转移到普通的CFC上以便于维护. 我遇到了一个问题,因为cfquery会自动将单引号转换为双引号.我该如何覆盖这种行为? 更具体的信息如下. 所以这是我开始的查询: cfquery na

我有一个不幸的任务,清理一堆旧的ColdFusion代码.查询到处都是,我正在努力将它们全部转移到普通的CFC上以便于维护.

我遇到了一个问题,因为cfquery会自动将单引号转换为双引号.我该如何覆盖这种行为?

更具体的信息如下.

所以这是我开始的查询:

<cfquery name="getObjectInfo" datasource="#BaseDS#">
  SELECT groupName AS lastname,'[Group]' AS firstname
  FROM   groups
  WHERE  groups.group_id = #objectreference_id#
</cfquery>

这里奇怪的是文字被“选中”,因为我们希望它被显示的方式(再次,我没有写这个,我只是想把它清理一下).所以在common函数中,select子句有一个可选参数:

<cffunction name="fSelGroup" access="public" returntype="query"
              hint="Returns query selecting given group.">

    <cfargument name="intGroupID" type="numeric" required="true"
                hint="ID of group to be returned." />
    <cfargument name="strSelectAttributes" type="string" required="false"
                hint="Attributes to be selected in query"
                default="*" />

    <cfquery name="getObjectInfo" datasource="#Application.DataSource#">
      SELECT #Arguments.strSelectAttributes#
      FROM   Groups
      WHERE  Group_ID = #Arguments.intGroupID#
    </cfquery>

    <cfreturn getObjectInfo />

  </cffunction>

这是问题:当我为strSelectAttributes参数传入“GroupName AS LastName,'[Group]’AS FirstName”时,发送到数据库的查询是:

SELECT GroupName AS LastName,''[Group]'' AS FirstName
FROM   Groups
WHERE  Group_ID = 4

你看,我的报价被“消毒”成一个无效的查询.

解决方法

ColdFusion不会转义所有单引号,只会转义那些通过变量插值到达查询的引号.这是罪犯:
SELECT #Arguments.strSelectAttributes#

这通常是一个有用的东西和一小段防御SQL注入攻击.因此,规则一是(此处和其他地方):不要从变量构建SQL字符串.

如果您必须使用变量来构建SQL字符串,尽管存在所有可能的负面影响,请使用PreserveSingleQuotes()函数:

SELECT #PreserveSingleQuotes(Arguments.strSelectAttributes)#

此函数阻止ColdFusion自动转义单引号.

顺便说一句,任何其他函数调用都会做同样的事情.尝试:

SELECT #LCase(Arguments.strSelectAttributes)#

这意味着PreserveSingleQuotes()实际上只是一个将字符串转换为函数结果的无操作,从而阻止自动变量插值例程的发生.

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读