Есть ли необходимость в большей проверке формы на стороне сервера, чем при объявлении аргументов?

#coldfusion #coldfusion-9 #coldfusion-10

#coldfusion #coldfusion-9 #coldfusion-10

Вопрос:

В моих CFC, которые обрабатывают отправленные формы, я выполняю проверку в начале функции, объявляя, какие аргументы требуются и какого типа они должны быть. Как таковой:

 <cfarugment name="forename" type="string" required="true"/>
 

В настоящее время я также проверяю значение при вставке в базу данных. Как таковой:

 INSERT INTO Person (Forename)
VALUES
(
<cfif structKeyExists(ARGUMENTS, 'Forename') AND Len(Trim(ARGUMENTS.Forename)) GT 0>
<cfqueryparam value="#ARGUMENTS.Forename#" cfsqltype="cf_sql_nvarchar">
<cfelse>
NULL
</cfif>
);
 

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

Комментарии:

1. Требуется не требует принудительной длины. Вы можете передать пустое значение.

Ответ №1:

Вам также необходимо

  1. запустите данные через фильтр защиты от Samy, который удалит любые недопустимые объекты HTML и защитит от межсайтовых скриптовых атак
  2. убедитесь, что запрос формы поступает с вашего сервера, используя токен подделки межсайтового запроса

и это просто не укладывается у меня в голове.

Комментарии:

1. Кроме того, я не думаю, что оценка входных данных относится к той же функции start, которая выполняет запись в базу данных. Разделите эту партию на два отдельных процесса.

2. @AdamCameron как еще я мог бы вставить нулевое значение в базу данных?

3. cfqueryparam имеет атрибут null .

4. @volumeone Я имел в виду все другие меры, упомянутые в этом ответе: у вас есть куча дополнительных проверок, которые вы должны выполнять сверх проверки длины. После проверки и готовности к хранению данных вызовите метод для их сохранения. В рамках этого все равно можно проверить значение на существование или проверить длину, чтобы определить, нужно ли его включать в ваш оператор SQL.