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/

Другие вопросы по тегам