Coldfusion 动态查询的SQL注入保护

Coldfusion 动态查询的SQL注入保护,coldfusion,sql-injection,cfquery,owasp,Coldfusion,Sql Injection,Cfquery,Owasp,针对SQL注入缺陷的典型控制措施是使用绑定变量cfqueryparam标记,验证字符串数据,并将存储过程用于实际的SQL层。这一切都很好,我也同意,但是如果这个站点是一个遗留站点,并且有很多动态查询,该怎么办呢。然后,重写所有查询是一项艰巨的任务,需要大量的回归和性能测试。我在考虑使用动态SQL过滤器,并在调用cfquery进行实际执行之前调用它 我在CFLib.org中找到了一个过滤器: 这似乎是一个非常简单的过滤器,我想知道是否有办法改进它或提出更好的解决方案 如果该站点是一个遗留站点,并且

针对SQL注入缺陷的典型控制措施是使用绑定变量cfqueryparam标记,验证字符串数据,并将存储过程用于实际的SQL层。这一切都很好,我也同意,但是如果这个站点是一个遗留站点,并且有很多动态查询,该怎么办呢。然后,重写所有查询是一项艰巨的任务,需要大量的回归和性能测试。我在考虑使用动态SQL过滤器,并在调用cfquery进行实际执行之前调用它

我在CFLib.org中找到了一个过滤器:

这似乎是一个非常简单的过滤器,我想知道是否有办法改进它或提出更好的解决方案

如果该站点是一个遗留站点,并且 它具有许多动态查询。 然后,重写所有查询是一个简单的过程 这是一项艰巨的任务,需要 广泛的回归期和 性能测试

是的,但如果您执行任何重大更改,包括使用您提议的功能,情况就是这样

因此,我仍然建议设置一些测试,重构以使用合理的框架,然后修复查询以使用cfqueryparam。

那个特定的函数是一堆废话,它不做它声称要做的事情,并且有可能通过错误地超过最大长度来破坏东西

它所做的一切就是变成45英镑&45; 和“进入&39;”-这不是SQL注入保护

所以,是的,如果你仍然想走这条路,找一个不同的函数,但我建议适当的重构

如果该站点是一个遗留站点,并且 它具有许多动态查询。 然后,重写所有查询是一个简单的过程 这是一项艰巨的任务,需要 广泛的回归期和 性能测试

是的,但如果您执行任何重大更改,包括使用您提议的功能,情况就是这样

因此,我仍然建议设置一些测试,重构以使用合理的框架,然后修复查询以使用cfqueryparam。

那个特定的函数是一堆废话,它不做它声称要做的事情,并且有可能通过错误地超过最大长度来破坏东西

它所做的一切就是变成45英镑&45; 和“进入&39;”-这不是SQL注入保护


所以,是的,如果你仍然想走这条路,找一个不同的函数,但我建议进行适当的重构。

显然,你还有很多工作要做。但是,当您卷起袖子时,为了减轻注入攻击带来的一些潜在损害,您可以做一件小事,即创建几个数据源,并通过一个仅限于select语句的数据源运行所有select only查询。对于所有的数据源,确保诸如grant、revoke、create、alter和drop等都被禁用

显然你还有很多工作要做。但是,当您卷起袖子时,为了减轻注入攻击带来的一些潜在损害,您可以做一件小事,即创建几个数据源,并通过一个仅限于select语句的数据源运行所有select only查询。对于所有的数据源,确保诸如grant、revoke、create、alter和drop等都被禁用

你可以试试。它是一个开源CFC,可用于扫描URL、表单和COOKIE作用域以进行SQL注入和XSS攻击。它不能保证提供保护,但在您重写查询时,它至少可以在今天提供一些保护。好在它可以包含在Application.cfm/cfc中,以大约4行代码的代价扫描每个CF页面请求上的作用域。

您可以尝试。它是一个开源CFC,可用于扫描URL、表单和COOKIE作用域以进行SQL注入和XSS攻击。它不能保证提供保护,但在您重写查询时,它至少可以在今天提供一些保护。好在它可以包含在Application.cfm/cfc中,以大约4行代码的代价扫描每个CF页面请求上的作用域。

将此代码放入Application.cfm文件中


将此编码放入application.cfm文件中


你完全正确。我的观点是,重构数百个查询以使用cfqueryparam比重新连接现有函数以使用在执行输入之前对其进行清理的中心函数需要更长的测试周期。好吧,你可能会说,在一天结束时,这仍然涉及到大量的测试,这是真的,但至少它是集中控制的。你知道CF中有一个很好的开源函数可以完成这项工作吗?你完全正确。我的观点是,重构数百个查询以使用cfqueryparam需要更长的测试周期 而不是重新连接现有函数以使用一个中心函数,该函数在执行输入之前对输入进行清理。好吧,你可能会说,在一天结束时,这仍然涉及到大量的测试,这是真的,但至少它是集中控制的。您是否知道CF中有一个很好的开源函数可以完成这项工作?
<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>