PreserveSingleQuotes and CFQueryParam



我正在使用CFLoop构建动态SQL查询。我正在使用CFSaveContent遍历变量并构建查询,然后使用 PreserveSingleQuotesCFQuery中执行它。这工作正常,但这种方法的问题是我不能使用CFQueryParam所以我的查询容易受到注入。想知道这个问题是否有任何解决方法?

更新:

    <cfsavecontent variable="sqlstring">
            SELECT   id
                    ,(CASE
                        <cfloop query="qGetRules">
                            WHEN val1 >=#qGetRules.equ# AND val2 >#arguments.leve# THEN 1
                        </cfloop>
                        ELSE 0
                         END) AS criteria
            FROM mt4_users
    </cfsavecontent>

    <cfquery name="qGetEquity" datasource="mydatasource">
        #PreserveSingleQuotes(variables.sqlstring)#
    </cfquery>

所以在这个例子中,如您所见,我不能将cfqueryparam用于arguments.leve,因为它会在PreserveSingleQuotes崩溃

诀窍

是使用 cfqueryparamlist 参数。它将正确格式化查询的数据、转义引号(如果需要(和所有内容。

如果列表是数值(例如,在 WHERE X IN (1,2,3,4) 语句中(:

<cfqueryparam value="#arguments.foo#" cfsqltype="cf_sql_integer" list="true">

如果列表是字符串值:

<cfqueryparam value="#arguments.foo#" cfsqltype="cf_sql_varchar" list="true">

这也适用于cfprocparam

相关内容

  • 没有找到相关文章

最新更新