6

一段时间以来,我一直在 Coldfusion 中使用普通表单和输入字段,但最近发现 cfinput 标签会自动为我防止一些 xss 攻击。这让我想知道,在冷融合中使用 cffrom 和 cfinput 而非普通形式和输入标签是否有任何缺点。

我在短时间内发现的唯一缺点是它向页面添加了 2 个外部样式表和 1 个脚本标记。

简而言之:

在冷融合中使用 CFFORM 相对于 FORM 有哪些优缺点?

4

4 回答 4

10

我更喜欢围绕我的表单编写自己的 JS。那天我开始使用 cfform,但最终想做比 cfform 能够处理的更强大的事情(验证等)。这迫使我学习 JS,从那以后我一直很高兴编写自己的 JS。

所以我想我会说一个很大的缺点是你受限于 cfform 可以处理的内容。根据您的情况,这可能没问题。

我很久以前遇到的另一个缺点(公平地说,可能已经解决了),是 cfform 生成的 JS 会与我的手写 JS 发生冲突或干扰。

它肯定会归结为偏好。使用 cfform 或常规形式既不是“正确”也不是“错误”。对我来说,我更喜欢能够手动执行我需要执行的任何操作,因为没有限制/限制。

于 2011-06-07T19:35:41.827 回答
5

<cfform>我与&有爱恨交织的关系<cfinput>

要获得与 CFFORM 提供的相同的 xss 保护,只需将 htmlEditFormat() 包裹在 value="" 中,如下所示:

<input name="x" value="#htmlEditFormat(x)#">

要获得更好的 XSS 保护,请使用OWASP Enterprise Security API(CF9 最新修补程序之一中包含的 .jar)

我喜欢无需编写 JS 即可轻松实现 ajaxified 表单,但我讨厌它如何生成大量丑陋的 JavaScript 并为相当简单的事情加载大量 JS 和 css 文件。因此,我决定仅将 cfform 用于内部站点,而不用于面向公众的站点(性能问题)。

除了 ajax 功能之外,接受 CF 布尔值并使用查询对象填充 select 的属性checked是非常有用的功能。cfinputcfselect

为正确的工作使用正确的工具。如果您发现<cfform>有用的功能,请使用它。只知道它的局限性,然后自己决定。

于 2011-06-07T19:51:43.700 回答
4

我已经使用 ColdFusion 将近 14 年了。CF 之所以如此出色的产品,是因为它使新用户能够在没有太多了解的情况下快速完成大量工作,并且它使火箭科学家也能够快速构建真正强大且安全的应用程序。

CFFFORM、CFINPUT、CFLAYOUT、CFPOD 是为新用户创建的标签。基本上,它们是训练轮。如果您是 Web 开发的新手,您应该试试这个标签。当您获得经验时,您会希望放弃这些标签并转向其他技术来创建更强大的应用程序。

这些标签没有错,就像训练轮没有错一样。您只需要知道每项工作都有合适的工具。实际上,每项工作都有很多合适的工具。

目前,我正在开发一个用于构建外部网站的 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 并通过其类或 ID 引用每个元素。如果这样做,您可以将每个元素中的数据提交给 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 强大的一年!!!

祝你好运!

于 2011-08-19T23:54:34.737 回答
1

我很久没有使用 ColdFusion 的 CFInput 了。我一直在使用 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-Only 标记这一事实。

这是一个链接,其中包含有关 jQuery Validation 库的更多信息:

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

于 2011-06-08T20:22:15.023 回答