我正在 ColdFusion 中编码,但试图留在 cfscript 中,所以我有一个函数允许我传入一个查询来运行它
<cfquery blah >
#query#
</cfquery>
但不知何故,当我用sql = "SELECT * FROM a WHERE b='#c#'"
并将其传入,ColdFusion 已将单引号替换为 2 个单引号。所以它变成了 WHERE b=''c''
在最终查询中。
我尝试过多种不同的方式创建字符串,但我无法让它只留下一个引号。即使进行字符串替换也没有效果。
知道为什么会发生这种情况吗?它毁了我在这个项目期间生活在 cfscript 中的希望
根据设计,ColdFusion 在插入变量时会转义单引号<cfquery>
tags.
为了做你想做的事,你需要使用PreserveSingleQuotes() http://livedocs.adobe.com/coldfusion/8/htmldocs/functions_m-r_14.html功能。
<cfquery ...>#PreserveSingleQuotes(query)#</cfquery>
然而,这并没有解决您所面临的 SQL 注入的危险。
Using <cfqueryparam> http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_p-q_18.html还允许数据库缓存查询,这在大多数情况下会提高性能。
阅读可能会有帮助旧的本福塔专栏 http://www.adobe.com/devnet/coldfusion/articles/ben_forta_faster.html and 布拉德·伍德最近发表的一篇文章 http://www.codersrevolution.com/index.cfm/2008/7/26/cfqueryparam-its-not-just-for-security-also-when-NOT-to-use-it有关使用好处的更多信息<cfqueryparam>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)