【发布时间】:2011-08-26 19:32:06
【问题描述】:
我有一堆通过 CFC 将数据发布到数据库的外部表单。
我做的是
- 创建带有回发的表单
- 在回发中创建一个对象并将表单数据映射到该对象 (cfc)
- 使用 CFparam 对类型进行验证并存储在 THIS 中。范围
- 调用自定义方法来扫描字符串以消除攻击(似乎效果很好)
- 要插入的 Cfquery。
我可以或应该做些什么来保护应用程序免受插入时的 SQL 攻击?我在 select 语句中使用 CFqueryParam,我是否也应该在 insert 语句中使用?
一个简单的 CFC 示例:
<!--- Instance Veriables --->
<cfparam name="THIS.firstPrintedField" type="string" default="#NullString#" />
<cfparam name="THIS.SecondPrintedField" type="string" default="#NullString#" />
<cfparam name="THIS.participantFullName" type="string" default="#NullString#" />
<cfparam name="THIS.studentStatus" type="string" default="#NullString#" />
<cfparam name="THIS.dob" type="date" default="#NullDate#" />
<cfparam name="THIS.readAndUnderStood_Day" type="string" default="#NullString#" />
<cfparam name="THIS.readAndUnderStood_Month" type="string" default="#NullString#" />
<cfparam name="THIS.readAndUnderStood_Year" type="string" default="#NullString#" />
<cfparam name="THIS.agreeToTerms" type="boolean" default="#NullBool#" />
<cfparam name="THIS.guardianFirstName" type="string" default="#NullString#" />
<cfparam name="THIS.guardianMiddleName" type="string" default="#NullString#" />
<cfparam name="THIS.guardianLastName" type="string" default="#NullString#" />
<cfparam name="THIS.DateTimeSubmited" type="date" default="#NullDate#" />
<cffunction access="public" name="addRecords" returntype="boolean">
<cftry>
<!--- Sanitize the string properties --->
<cfset Sanitize() />
<cfquery datasource="#DSN#" name="qryAddRecords">
INSERT INTO mod_OutdoorProgram_Waivers
(
firstPrintedField
,SecondPrintedField
,participantFullName
,studentStatus
,dob
,readAndUnderStood_Day
,readAndUnderStood_Month
,readAndUnderStood_Year
,agreeToTerms
,guardianFirstName
,guardianMiddleName
,guardianLastName
)
VALUES
(
'#THIS.firstPrintedField#'
,'#THIS.SecondPrintedField#'
,'#THIS.participantFullName#'
,'#THIS.studentStatus#'
,'#THIS.dob#'
,'#THIS.readAndUnderStood_Day#'
,'#THIS.readAndUnderStood_Month#'
,'#THIS.readAndUnderStood_Year#'
,'#THIS.agreeToTerms#'
,'#THIS.guardianFirstName#'
,'#THIS.guardianMiddleName#'
,'#THIS.guardianLastName#'
)
</cfquery>
<cfcatch><cfreturn false /></cfcatch>
</cftry>
<cfreturn true />
</cffunction>
【问题讨论】:
-
为了说得非常清楚,请遵循 DefyGravity 的建议,永远不要使用不使用
<cfqueryparam />的动态值编写查询。
标签: sql-server-2008 coldfusion sql-injection cfc