我正在使用CFLoop
构建一个动态的SQL查询。 我正在使用CFSaveContent
遍历变量并构建查询,然后我使用PreserveSingleQuotes
在CFQuery
中执行它。 这工作正常,但这种方法的问题是,我不能使用CFQueryParam
,所以我的查询是脆弱的注射。 是否想知道这个问题是否有解决方法?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
为arguments.leve
,因为它会在PreserveSingleQuotes
您是否查看了[cffs和cfqueryparam]的[cfscript等价物](https://helpx.adobe.com/coldfusion/cfml-reference/script-functions-implemented-as-cfcs/query)上的文档。 HTML)? – Leigh
理论上,我们所有人一直都在验证用户提供的所有字段。单独依靠查询参数来确保安全性并不像您所能做到的那样安全。此外,PreserveSingleQuotes有它的位置,但我从来没有成功处理撇号。 –
由于这是一个移动web服务,我无法验证用户的输入(在移动应用程序旁边)。如果有人嗅探URL并尝试注入SQL,我需要停止它。 – BlackM