Coldfusion, безопасный код от атак SQL-инъекций - PullRequest
1 голос
/ 26 августа 2011

У меня есть куча внешних форм, которые отправляют данные в базы данных через CFC.

Что я делаю, это

  1. Создание формы без обратной передачи
  2. В посте обратно создайте объект и сопоставьте данные формы с объектом (cfc)
  3. Используйте CFparam для проверки типа и сохранения в ЭТОМ. Сфера
  4. Вызов пользовательского метода для сканирования строк, чтобы стерилизовать их от атак (кажется, работает хорошо)
  5. Запрос на вставку.

Есть ли что-то еще, что я могу или должен сделать для защиты приложения от SQL-атак на вставку? Я использую CFqueryParam в операторах выбора, я должен также использовать в операторах вставки?

Пример простого 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>

Ответы [ 2 ]

16 голосов
/ 26 августа 2011

cfqueryparam следует использовать везде, так как это решение для уязвимости в ColdFusions sql для инъекций.

1 голос
/ 27 августа 2011

Кроме того, если вы точно знаете сайт, который будет публиковаться в ваших CFC, вы можете обезопасить их с помощью некоторой логики, чтобы принимать соединения только с этого конкретного сайта / IP-адреса ... Еще один шаг, чтобы люди не мешали.с вашим кодом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...