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.F和form.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)
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |