CFForm против формы в Coldfusion - PullRequest
5 голосов
/ 07 июня 2011

Я уже некоторое время использую обычные формы и поля ввода в Coldfusion, но недавно обнаружил, что теги cfinput автоматически предотвращают некоторые xss-атаки для меня. Это заставило меня задуматься, есть ли недостатки использования cffrom и cfinput по сравнению с обычной формой и входными тегами в Coldfusion.

Единственный недостаток, который я обнаружил за это короткое время, заключается в том, что он добавляет на страницу 2 внешние таблицы стилей и 1 тег сценария.

так вкратце:

Каковы преимущества и недостатки использования CFFORM по сравнению с FORM при холодном синтезе?

Ответы [ 4 ]

9 голосов
/ 07 июня 2011

Я предпочитаю писать свой собственный JS вокруг моих форм.Я начинал с cfform, но в конце концов хотел сделать более надежные вещи (проверки и т. Д.), Чем cfform смог обработать.Это заставило меня изучать JS, и с тех пор я очень рад писать свой собственный JS.

Так что я бы сказал, что одним большим недостатком является то, что вы ограничены тем, что cfform может обработать.В зависимости от вашей ситуации это может быть хорошо.

Еще один недостаток, с которым я столкнулся давным-давно (честно говоря, возможно, был устранен с тех пор), заключается в том, что JS, сгенерированный cfform, будет конфликтовать или мешатьс моим рукописным JS.

Это, безусловно, сводится к предпочтениям.Ни правильно, ни неправильно использовать cfform или обычные формы.Для меня я предпочитаю иметь возможность делать любые манипуляции, которые мне нужно делать вручную, так как нет никаких ограничений / ограничений.

5 голосов
/ 07 июня 2011

У меня отношения любви-ненависти с <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> полезной, используйте ее.Просто знайте его ограничения и решайте сами.

3 голосов
/ 20 августа 2011

Я использую 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 !!!

Удачи!

1 голос
/ 09 июня 2011

Я давно не использовал CFInput в ColdFusion.Я использовал плагин jQuery Validation, чтобы я мог выполнять проверку на другие вещи, такие как:

  • виден ли элемент?(т. е. скрыть раздел, если он не является обязательным, но отменить требование, если оно не показано.)
  • установлен ли флажок?(т. е. вы отметили «другое», теперь требуется заполнить пробел.)
  • это допустимое значение даты / времени?(т.е. я дополнительно использую библиотеку DateJS, чтобы помочь в этом)
  • выполнить запрос ajax, чтобы определить, является ли имя пользователя уникальным
  • действительно ли введенный URL-адрес?
  • сравнить пароль1 сpassword2
  • пользовательские правила, основанные на комбинации вещей

Большинство правил проверки могут быть добавлены в параметр класса inline:

<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/

...