1

を使用して動的SQL クエリCFLoopを作成しています。私はCFSaveContent変数を反復処理してクエリを作成するために使用しており、それをCFQueryusingで実行していPreserveSingleQuotesます。それは問題なく機能しますが、この方法の問題は、使用できない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、 for を使用できません。arguments.levePreserveSingleQuotes

4

1 に答える 1

0

listのパラメータを使用するのがコツですcfqueryparam。クエリ、エスケープされた引用符 (必要な場合)、およびすべてのデータを正しくフォーマットします。

リストが数値の場合 (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ます。

于 2015-10-14T15:28:57.540 に答える