2011-08-26 6 views
1

나는 CFC를 통해 데이터베이스에 데이터를 게시하는 많은 외부 양식을 가지고 있습니다.Coldfusion, SQL 주입 공격으로부터의 cfc 보안

내가하는 일은

  1. 다시 객체 (CFC)에 개체 및지도 양식 데이터를 생성 포스트에서 포스트 백/
  2. 승 형태
  3. 사용 CFPARAM가에 유효성 검사를 할 만들기입니다 이 유형과 상점. 범위
  4. 문자열을 검사하여 공격으로부터 멸균하기 위해 사용자 정의 방법을 호출하십시오 (잘 작동하는 것 같습니다)
  5. 삽입 할 Cfquery.

삽입 공격시 SQL 공격으로부터 애플리케이션을 보호하기 위해 할 수있는 일이 있습니까? select 문에서 CFqueryParam을 사용합니다. insert 문에서도 사용해야합니까? 간단한 CFC의

예 : 그것은 ColdFusions의 SQL 인젝션 취약성 해결책으로서

<!--- 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> 
+3

DefyGravity의 조언을 따르고, 을 사용하지 않는 동적 값을 가진 쿼리를 작성하지 마십시오. –

답변

16

CFQUERYPARAM가 도처에 사용되어야한다.

+1

+1 확실한 대답은 .... 참고로, 일부 데이터베이스는 SELECT 문에서 CFQUERYPARAM을 사용할 수 없습니다. –

1

또한 CFC에 게시 할 사이트가 특정 사이트/IP 주소의 연결 만 수락 할 수있는 몇 가지 논리로 보안을 설정할 수 있음을 알고있는 경우 ... 사람들을 코드를 엉망으로 만들지 마십시오 ...