当前位置: 首页 > 面试题库 >

如何在ColdFusion中覆盖SQL清理

宣弘新
2023-03-14
问题内容

我有一个不幸的任务,就是清理一堆旧的ColdFusion代码。查询无处不在,我正在努力将它们全部移至常见的CFC,以便于维护。

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

更具体的信息如下。

所以这是我开始的查询:

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

奇怪的是,由于要显示文字,所以正在“选择”一个文字(再次,我没有写这个,我只是想稍微清理一下)。因此,在通用函数中,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>

这是问题所在 :当我传递"GroupName AS LastName, '[Group]' AS FirstName"strSelectAttributes参数时,发送到数据库的查询是:

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()实际上只是一个无操作,它将字符串转换为函数结果,从而防止了自动变量插值例程的发生。



 类似资料:
  • 问题内容: 我目前在glassfish v2.1中使用基于身份的身份验证来登录用户,并且工作正常。我想切换到该网站,并希望能够获得最初请求的URL(即在重定向到登录页面之前),并在我的程序化登录代码中使用它,以便在身份验证后将用户重定向回请求的页面。 我已经看过源代码-在我的情况下,它是(catalina代码库),它将初始请求保存在会话中的对象中,但是该会话不是,因此没有直接方法可以访问它。 还是

  • 问题内容: 未正确探讨此问题。真正的问题在于。 原始问题中的第一个代码粘贴将产生预期的结果。但是,仍然需要注意。请参阅以下示例: 是 不 一样的 也就是说,不会自动调用与User对象关联的方法。 实际上 ,如果在模型上被覆盖,将生成以下描述。 摘要 这一切对我来说似乎很愚蠢。这似乎是在告诉我在指定类型时实际上并没有在调用。有人可以解释这里的实际情况吗? 任何可以帮助我解决这个问题的精灵都可以回答我

  • 问题内容: 我想创建一个具有任意大小的div,然后在该div上显示一些内容。完全按照CSS中下面的div定位和调整叠加层大小的最佳方法是什么? 问题答案: 您可以使用将叠加层放置在div内部,然后在各个方向上将其拉伸,如下所示: CSS 已更新* 您只需要确保您的父div为其添加了属性,并为其设置了更低的属性。 为下面的评论者制作了一个可以在所有浏览器(包括IE7 +)上运行的演示。 从CSS中移

  • 我想重写java中的getProperty()方法。util。物业类别,请告知。 1.Spring上下文文件 2.Java类 3.配置文件 仅供参考:我正在从配置文件中提取批次值,并希望在从中获取值后调用trim()。属性,以避免代码冗余,尝试重写getProperty()方法。 使用:Spring 4.0

  • 问题内容: 我正在尝试Backbone.js,而我正在尝试的事情之一就是调用远程API,因此,据我了解的文档资料,我需要能够覆盖Backbone.sync 。 在文档本身中没有如何执行此操作的示例,并且似乎没有用于Backbone的google组…有人可以指出执行此操作的示例吗? 问题答案: 看看这个带注释的源示例,在该示例中,它们被本地存储替代项覆盖 基本上,Backbone.sync应该是一个

  • 问题内容: 我试图覆盖Java中的方法。我有一堂课,基本上有2个数据字段和。现在,我想重写方法,以便可以在2个对象之间进行检查。 我的代码如下 但是当我写它给我错误时,因为方法只能比较并且是。 Solution 我按照建议使用运算符,问题解决了。 问题答案: Output: `run: – Subash Adhikari - VS - K false – Subash Adhikari - VS