2015-10-07 5 views
2

Я новичок в Coldfusion, и мой предыдущий фон находится на PHP с использованием codeIgniter. В настоящее время я использую CFWheels для проекта.CFWheels ORM и SQL Injection

У меня есть ВСТАВИТЬ Заявление о

n_building = model("buildings").new(); 
n_building.name = name; 
n_building.save(); 

И прочитал заявление

room = model("rooms").findOne(where="name='#name#' AND b_id='#b_id#'"); 

СОБРАННОЙ лучшей практики или она может быть написана лучше с точки зрения безопасности.

Вопрос в том, что использование ORM автоматически защитит мои запросы от SQL Injection или любой другой формы инъекции или угрозы безопасности? Должен ли я использовать что-то еще с ним, если да, то как я могу изменить приведенные выше утверждения?

+0

Посмотрите на динамические искатели http://docs.cfwheels.org/docs/dynamic-finders –

ответ

1

CfWheels по умолчанию использует cfqueryparam для всех, за исключением случаев, когда вы используете параметр параметризуете и устанавливаете его в false. Поэтому вам не нужно беспокоиться об инъекции Sql.

Читайте о параметризации параметра в findAll method description.

Ваш код может быть улучшен, как предложил Джон Виш, используя динамические искатели.

+0

чистый ответ! У меня есть один вопрос: что делает CFWheels, если у нас также есть предложение 'Have' в атрибуте' group' оператора модели? Будет ли он параметризировать предложение наличия? Например: комната = модель («комнаты»). FindAll (select = "count (id)", где = "name = '# name #' AND b_id = '# b_id #'", group = "room_type Имея счет (id)> 0 "); Это просто простой пример, но вы получаете идею. – Anurag

1

Насколько я знаю, cfwheels ORM будет параметризовать запросы, созданные ORM. В заявлении он введет <cfqueryparam>. Но вы можете включить отладку и легко просмотреть запрос, отправленный в базу данных.

+0

Это правильно. CFWheels будет анализировать ваше значение 'where' и параметризовать значения, переданные в. –