use*_*701 1 coldfusion sql-injection cfquery owasp
针对SQL注入漏洞的典型控制是使用绑定变量(cfqueryparam标记),字符串数据验证以及转向实际SQL层的存储过程.这很好,我同意,但如果该网站是遗留的,它具有很多动态查询.然后,重写所有查询是一项艰巨的任务,需要进行大量的回归和性能测试.我正在考虑使用动态SQL过滤器并在调用cfquery之前调用它以进行实际执行.
我在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 (bryan@guardianlogic.com)
* @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>
Run Code Online (Sandbox Code Playgroud)
这似乎是一个非常简单的过滤器,我想知道是否有办法改进它或提出更好的解决方案?
如果该站点是遗留站点并且它具有大量动态查询,该怎么办?然后,重写所有查询是一项艰巨的任务,需要进行大量的回归和性能测试.
是的,但如果您执行任何重大更改,包括使用类似您提议的功能,则会出现这种情况.
因此,我仍然建议进行一些测试设置,重构以使用合理的框架,然后修复查询以使用cfqueryparam.
这个特定的功能是一堆废话,它没有做它声称做的事情,并且有可能破坏东西(错误地超过最大长度).
它所做的就是转--成--和'成'-这是不是SQL注入防护!
所以,是的,如果你仍然希望沿着这条路走下去,找一个不同的功能,但我建议你进行适当的重构.