我继承了一个大型的旧版 ColdFusion 应用程序。有数百个 <cfquery>some sql here #variable#</cfquery> 语句需要沿以下行参数化: <cfquery> some sql here <cfqueryparam value="#variable#"/> </cfquery>
如何以编程方式添加参数化?
我曾考虑过编写一些正则表达式或 sed/awk'y 之类的解决方案,但似乎某个地方的某个人已经解决了这样的问题。自动推断 sql 类型可获得奖励积分。
我继承了一个大型的旧版 ColdFusion 应用程序。有数百个 <cfquery>some sql here #variable#</cfquery> 语句需要沿以下行参数化: <cfquery> some sql here <cfqueryparam value="#variable#"/> </cfquery>
如何以编程方式添加参数化?
我曾考虑过编写一些正则表达式或 sed/awk'y 之类的解决方案,但似乎某个地方的某个人已经解决了这样的问题。自动推断 sql 类型可获得奖励积分。
有一个查询参数扫描器可以在 RIAForge 上为您找到它们:http: //qpscanner.riaforge.org/
这里引用了一个脚本:http ://www.webapper.net/index.cfm/2008/7/22/ColdFusion-SQL-Injection 将为您完成大部分繁重的工作。您所要做的就是检查查询并确保语法能够正确解析。
没有理由不使用 CFQueryParam,除了它更安全之外,它是性能提升和处理基于字符的列类型中引用值的最佳方式。
请记住,您可能无法使用 <cfqueryparam> 解决所有问题。
我已经看到了许多在查询字符串中传递按字段名称排序的示例,这是一个稍微棘手的问题,因为您需要以更“手动”的方式进行验证。
<cf_inputFilter
scopes = "FORM,COOKIE,URL"
chars = "<,>,!,&,|,%,=,(,),',{,}"
tags="script,embed,applet,object,HTML">
我们用它来对抗最近的 SQL 注入攻击。我们将它添加到我们网站的 Application.cfm 文件中。
我怀疑是否有一种解决方案可以完全满足您的需求。我看到的唯一选择是编写您自己的递归搜索,为您构建报告或使用人们上面列出的应用程序/脚本之一。基本上,您将不得不编辑每个页面或批准所有自动更改。