CFForm против формы в Coldfusion
Я уже некоторое время использую простые формы и поля ввода в Coldfusion, но недавно обнаружил, что теги cfinput автоматически предотвращают некоторые xss-атаки для меня. Это заставляет меня задуматься, есть ли недостатки использования cffrom и cfinput по сравнению с обычной формой и входными тегами в Coldfusion.
Единственный недостаток, который я обнаружил за короткое время, это то, что он добавляет на страницу 2 внешние таблицы стилей и 1 тег сценария.
так вкратце:
Каковы преимущества и недостатки использования CFFORM по сравнению с FORM в холодном синтезе?
4 ответа
Я предпочитаю писать свой собственный JS вокруг моих форм. Я начал с cfform еще в тот день, но в конечном итоге хотел сделать более надежные вещи (проверки и т. Д.), Чем cfform был в состоянии обработать. Это заставило меня изучать JS, и с тех пор я очень рад писать свой собственный JS.
Так что, я думаю, я бы сказал, что одним большим недостатком является то, что вы ограничены тем, что может обработать cfform. В зависимости от вашей ситуации это может быть хорошо.
Другой недостаток, с которым я столкнулся давным-давно (честно говоря, возможно, с тех пор и был устранен), заключается в том, что JS, генерируемый cfform, будет конфликтовать или мешать моему рукописному JS.
Это, безусловно, сводится к предпочтениям. Ни правильно, ни неправильно использовать cfform или обычные формы. Для меня я предпочитаю иметь возможность делать любые манипуляции, которые мне нужно сделать вручную, так как нет никаких ограничений / ограничений.
У меня отношения любви-ненависти с <cfform>
& <cfinput>
,
Чтобы иметь такую же защиту xss, что и CFFORM, просто оберните htmlEditFormat() вокруг value="" в обычном порядке, например так:
<input name="x" value="#htmlEditFormat(x)#">
Для еще лучшей защиты XSS используйте OWASP Enterprise Security API (.jar включен в одно из последних исправлений CF9)
Мне нравится, как я могу легко создавать ajaxified форму без написания JS, но я ненавижу то, как она генерирует много уродливого JavaScript и загружает множество файлов JS и css для чего-то довольно простого. Поэтому я решил использовать cfform только для внутренних сайтов, а не для общедоступного сайта (проблема с производительностью).
Кроме функций AJAX, checked
атрибут, который принимает логическое значение CF и заполнение select объектом запроса - это функции, которые cfinput
а также cfselect
предоставить что может быть весьма полезным.
Используйте правильный инструмент для правильной работы. Если вы нашли особенность <cfform>
полезно, используйте это. Просто знайте его ограничения и решайте сами.
Я использую ColdFusion в течение почти 14 лет. Причина, по которой CF является таким офигенным продуктом, заключается в том, что он дает новым пользователям возможность быстро выполнить большую работу без особого понимания, а также позволяет ученым-ракетостроителям быстро создавать действительно мощные и безопасные приложения.
CFFFORM, CFINPUT, CFLAYOUT, CFPOD - это теги, которые создаются для новых пользователей. В основном это тренировочные колеса. Если вы новичок в веб-разработке, попробуйте эти теги. По мере накопления опыта вы захотите отбросить эти теги и перейти на другие методы для создания более надежных приложений.
В этих метках нет ничего плохого, точно так же, как в тренировочных колесах нет ничего плохого. Вам просто нужно знать, что для каждой работы есть подходящий инструмент. На самом деле, есть много подходящих инструментов для каждой работы.
В настоящее время я занимаюсь разработкой интрасети ColdFusion 9 / jQuery / SQL Server, которая создает внешние веб-сайты. Я делаю это без использования одного тега формы. И я делаю это полностью в CFSCRIPT. Вау!
Используя jQuery, вам не нужны формы. Вам просто нужны входные данные. Вот как я могу создать вход в CFSCRIPT.
<cfscript>
Options = "";
for (i = 1; i lte 10; i++) {
Options = Options & wrapOption("Some choice #i# ", i);
}
SelectBox = wrapSelect(Options, "MySelectID");
writeOutput(SelectBox);
SecretDiv = wrapDiv("", "", "MyDivID");
writeOutput(SecretDiv);
</cfscript>
Пользовательские функции для создания HTML находятся в моем файле UDF_Library.cfm:
// WRAP SELECT
function wrapSelect(SelectContent, Class, ID) {
LOCAL.SelectContent = ARGUMENTS.SelectContent;
LOCAL.Properties = "";
// CLASS
if (isDefined("ARGUMENTS.Class")) {
LOCAL.Properties = LOCAL.Properties & " class='#ARGUMENTS.Class#'";
}
// ID
if (isDefined("ARGUMENTS.ID")) {
LOCAL.Properties = LOCAL.Properties & " id='#ARGUMENTS.ID#'";
}
LOCAL.Item = "<select #LOCAL.Properties#>#LOCAL.SelectContent#</select>";
return LOCAL.Item;
}
// WRAP OPTION
function wrapOption(Content, Value, Selected) {
LOCAL.Content = ARGUMENTS.Content;
LOCAL.Properties = " value='#ARGUMENTS.Value#'";
// SELECTED
if (isDefined("ARGUMENTS.Selected") and (ARGUMENTS.Selected eq "selected")) {
LOCAL.Properties = LOCAL.Properties & " selected";
}
LOCAL.Item = "<option #LOCAL.Properties#>#LOCAL.Content#</option>";
return LOCAL.Item;
}
// CREATE DIV
function wrapDiv(Content, Class, ID) {
LOCAL.Properties = "";
// CLASS
if (isDefined("ARGUMENTS.Class")) {
LOCAL.Properties = LOCAL.Properties & " class='#ARGUMENTS.Class#'";
}
// ID
if (isDefined("ARGUMENTS.ID")) {
LOCAL.Properties = LOCAL.Properties & " id='#ARGUMENTS.ID#'";
}
LOCAL.Item = "<div #LOCAL.Properties#>#ARGUMENTS.Content#</div>";
return LOCAL.Item;
}
Я использую jQuery и ссылаюсь на каждый элемент по его классу или идентификатору. Если вы сделаете это, вы можете отправить данные в каждом элементе для вызова ajax, например:
<script type="text/javascript">
$(document).ready(function() {
$("#MySelectID").change(function() {
MyID = $("#MySelectID").val();
$("#MySecretDiv").load("CoolQuery.cfm?UserID"+MyID);
});
});
</script>
Дело в том, что пока вы используете CFFORM и CFINPUT, вы не можете делать все действительно мощные вещи jQuery. Но вам нужны эти теги, чтобы начать.
2012 год станет офигительным годом для возможностей ColdFusion и jQuery!!!
Удачи!
Я давно не использовал CFInput в ColdFusion. Я использовал плагин jQuery Validation, чтобы я мог выполнять проверку на другие вещи, такие как:
- элемент виден? (то есть скрыть раздел, если не обязательно, но отменить требование, если оно не показано.)
- флажок установлен? (т. е. вы отметили "другое", теперь необходимо заполнить пробел.)
- это действительное значение даты / времени? (т.е. я дополнительно использую библиотеку DateJS, чтобы помочь в этом)
- выполнить запрос ajax, чтобы определить, является ли имя пользователя уникальным
- URL введен правильно?
- сравнить пароль1 с паролем2
- пользовательские правила, основанные на сочетании вещей
Большинство правил проверки могут быть встроены в параметр класса:
<input type="text" name="Name" class="required">
<input type="text" name="Birthdate" class="required date">
<input type="text" name="Email" class="required email">
<input type="text" name="Website" class="url">
Я предпочитаю использовать jQuery, потому что иногда мне нужно добавить эту же логику в форму, не основанную на ColdFusion, и мне не нужно беспокоиться о том, что CFInput является тегом только для ColdFusion.
Вот ссылка с дополнительной информацией о библиотеке проверки jQuery:
http://bassistance.de/jquery-plugins/jquery-plugin-validation/