针对SQL注入缺陷的典型控件是使用绑定变量(cfqueryparam标签),验证字符串数据并转向实际SQL层的存储过程。这一切都很好,我同意,但是,如果该网站是一个遗留的网站,它具有很多动态查询功能。然后,重写所有查询是一项艰巨的任务,需要进行大量的回归和性能测试。我正在考虑使用动态SQL过滤器并在调用cfquery之前调用它来执行实际操作。针对动态查询的SQL注入保护
我发现CFLib.org一个过滤器(http://www.cflib.org/udf/sqlSafe):
<cfscript>
/**
* Cleans string of potential sql injection.
*
* @param string String to modify. (Required)
* @return Returns a string.
* @author Bryan Murphy ([email protected])
* @version 1, May 26, 2005
*/
function metaguardSQLSafe(string) {
var sqlList = "-- ,'";
var replacementList = "#chr(38)##chr(35)##chr(52)##chr(53)##chr(59)##chr(38)##chr(35)##chr(52)##chr(53)##chr(59)# , #chr(38)##chr(35)##chr(51)##chr(57)##chr(59)#";
return trim(replaceList(string , sqlList , replacementList));
}
</cfscript>
这似乎是一个非常简单的过滤器,我想知道是否有办法改进它,或者拿出一个解决方案更好
你是绝对正确的。我的观点是,重构数百个使用cfqueryparam的查询涉及更长的测试周期,而不是重新连接现有的函数以利用中央函数在执行前清理输入。那么,你可以说在一天结束的时候,这仍然涉及到严格的测试,这是事实,但至少它是集中包含的。 你碰巧知道一个很好的开源功能(理想情况下在CF中)完成这项工作吗? – user164701 2010-06-09 14:24:26