Как передать переменные в CFC при отправке формы без использования скрытых полей?

#coldfusion

#coldfusion

Вопрос:

Использование: ColdFusion 10, jQuery 1.9, IIS

Я создал CFC (разрешает удаленный доступ), который обрабатывает вставку комментариев в базу данных, будь то новые комментарии или ответы на существующие.

У меня есть форма, которая отправляется в этот CFC, когда вы хотите оставить комментарий.

На данный момент я передаю (как скрытые поля) переменные формы в CFC, чтобы сообщить ему различные сведения о комментарии, который должен быть вставлен: например, для чего User предназначен комментарий (идентификатор получателя) и на который CommentID он ссылается (если это ответ). Эти значения сильно меняются, потому что иногда пользователь отвечает на комментарий другого пользователя.

Я не хочу отправлять скрытые переменные в своей форме, потому что они могут быть легко изменены злоумышленником. Как я могу отправить основную информацию формы, используя переменные формы (например, тело комментария), но передать чувствительные переменные, используя только ColdFusion, чтобы хакер не мог ими манипулировать?

Одна вещь, которую я мог бы сделать, это отправить обратно на саму страницу, а затем использовать <cfinvoke> для вызова CFC и передачи аргументов. Я бы установил аргументы в вызове, а не в форме. Будет ли это правильным способом сделать это?

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

1. Какое это имеет отношение к jQuery?

2. Я использую jQuery AJAX для отправки формы, а также использую его для получения информации о комментарии, если пользователь хочет ответить на комментарий. Он в основном захватывает идентификатор комментария и выполняет вызов AJAX, чтобы выяснить, кто сделал комментарий в первую очередь. Затем ответ отправляется правильному пользователю.

3. @volumeone Я думаю, что он имел в виду, что это ajax / веб-приложение, связанное в целом и не специфичное для jQuery настолько, чтобы это было помечено jQuery.

4. хорошо, я удалил тег jQuery

5. Я что-то здесь упускаю или cfqueryparam не справляется с этой проблемой?

Ответ №1:

Единственное место, где злоумышленники не могут легко изменять, — это Session .

Храните конфиденциальные данные в Session , и убедитесь, что зарегистрированный пользователь имеет надлежащее право выполнять запрошенные им действия (например, может удалять только свои собственные данные, а не другие данные ppl)

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

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

2. Как насчет использования области запроса, а не области сеанса?

3. Конечно, если вы знаете его ограничение.

Ответ №2:

Что касается: «Одна вещь, которую я мог бы сделать, это отправить обратно на саму страницу, а затем использовать для вызова CFC и передачи аргументов. Я бы установил аргументы в вызове, а не в форме. Будет ли это правильным способом сделать это? »

Я думаю, это было бы намного лучше, чем отправлять в cfc, что, по вашим словам, вы делаете сейчас. Небольшие вариации этой темы:

  • Отправьте на другую страницу, которая вызывает метод cfc.
  • Забудьте cfc и поместите вызов базы данных на страницу .cfm. Фактически, если cfc не содержит ничего, кроме запроса вставки, и не используется где-либо еще, в этом нет необходимости.

Что касается отказа от использования скрытых полей формы, у вас могут возникнуть проблемы. Информация о пользователе может храниться в области сеанса, как предложил Генри, но информацию о получателе сложнее защитить. Вы могли бы сделать идентификатор получателя частью имени поля формы. Затем, чтобы защитить себя от ошибок, добавьте еще одну проверку для переменной cgi.http_referrer.

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

1. Я отправляю формы на ту же страницу, а затем вызываю CFC с аргументами формы. Чем включение страницы .cfm будет отличаться от вызова CFC, вы все равно будете использовать те же переменные формы, не так ли?

2. И ваш комментарий, и мой ответ предполагают, что форма должна быть отправлена на страницу .cfm вместо .cfc. Разница в том, какая это страница. Вы отправляете на страницу с кодом формы, и я предложил другую страницу. В контексте этого вопроса я вижу, что эта деталь не имеет значения.

3. Почему это лучше, чем отправка в CFC? Вы можете отправлять данные в CFC через AJAX так же легко, как и делать это так, как вы предлагаете. Если информация о пользователе хранится в области сеанса, эта информация все равно может быть использована при прямой отправке данных в CFC.

4. Часто ли один вариант лучше другого, зависит от конкретной ситуации. Даже тогда это часто вопрос мнения.