如何在 ColdFusion 站点上更正此 SQL 注入?

How to correct this SQL Injection on a ColdFusion site?

提问人:MrPeriodical 提问时间:6/23/2023 最后编辑:rrkMrPeriodical 更新时间:6/23/2023 访问量:134

问:

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

我该如何纠正这个问题?原来的开发人员早就离开了公司,我对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>

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

安全性 ColdFusion SQL 注入

评论


答:

10赞 rrk 6/23/2023 #1

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

不过,我还是建议使用正确的列名而不是动态变量。

<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>