如何纠正 ColdFusion 站点上的 SQL 注入?

MrP*_*cal 1 sql security coldfusion sql-injection

对我公司创建的一个小型内部网站的代码进行了自动审查,并要求我修复检测到的漏洞。

我该如何纠正这个问题?原开发人员早已离开公司,我对coldfusion不太熟悉。

<cfquery name="qry_Products" datasource="#request.mssql_dsn#" username="#request.mssql_uid#" password="#request.mssql_pwd#">
    UPDATE  tblProduct
    SET     #form.F# = <cfif currVal is 1>0<cfelse>1</cfif>
    WHERE   ID = #form.ID#
</cfquery>
Run Code Online (Sandbox Code Playgroud)

自动审核显示第 3 行和第 4 行存在问题。我猜问题是form.Fform.ID

RRK*_*RRK 10

来自表格的动态 SQL 表列名并不是最好的方法。但如果你必须这样做,那么我将创建一个映射结构来控制最终在原始查询中呈现的值,并且form.ID你应该使用<cfqueryparam>,这将防止任何 sql 注入尝试。

尽管如此,我还是建议使用正确的列名称而不是动态变量。

<cfset columnValueMap = {
    'formValue1': 'dbColumnName1',
    'formValue2': 'dbColumnName2',
    'formValue3': 'dbColumnName3'
}>
<cfif structKeyExists(columnValueMap, form.F)>
    <cfquery name="qry_Products" datasource="#request.mssql_dsn#" username="#request.mssql_uid#" password="#request.mssql_pwd#">
        UPDATE  tblProduct
        SET     #columnValueMap[form.F]# = <cfif currVal is 1>0<cfelse>1</cfif>
        WHERE   ID = <cfqueryparam value="#form.ID#" cfsqltype="integer">
    </cfquery>
</cfif>
Run Code Online (Sandbox Code Playgroud)