一段时间以来,我一直在 Coldfusion 中使用普通表单和输入字段,但最近发现 cfinput 标签会自动为我防止一些 xss 攻击。这让我想知道,在冷融合中使用 cffrom 和 cfinput 而非普通形式和输入标签是否有任何缺点。
我在短时间内发现的唯一缺点是它向页面添加了 2 个外部样式表和 1 个脚本标记。
简而言之:
在冷融合中使用 CFFORM 相对于 FORM 有哪些优缺点?
一段时间以来,我一直在 Coldfusion 中使用普通表单和输入字段,但最近发现 cfinput 标签会自动为我防止一些 xss 攻击。这让我想知道,在冷融合中使用 cffrom 和 cfinput 而非普通形式和输入标签是否有任何缺点。
我在短时间内发现的唯一缺点是它向页面添加了 2 个外部样式表和 1 个脚本标记。
简而言之:
在冷融合中使用 CFFORM 相对于 FORM 有哪些优缺点?
我更喜欢围绕我的表单编写自己的 JS。那天我开始使用 cfform,但最终想做比 cfform 能够处理的更强大的事情(验证等)。这迫使我学习 JS,从那以后我一直很高兴编写自己的 JS。
所以我想我会说一个很大的缺点是你受限于 cfform 可以处理的内容。根据您的情况,这可能没问题。
我很久以前遇到的另一个缺点(公平地说,可能已经解决了),是 cfform 生成的 JS 会与我的手写 JS 发生冲突或干扰。
它肯定会归结为偏好。使用 cfform 或常规形式既不是“正确”也不是“错误”。对我来说,我更喜欢能够手动执行我需要执行的任何操作,因为没有限制/限制。
<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
是非常有用的功能。cfinput
cfselect
为正确的工作使用正确的工具。如果您发现<cfform>
有用的功能,请使用它。只知道它的局限性,然后自己决定。
我已经使用 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 强大的一年!!!
祝你好运!
我很久没有使用 ColdFusion 的 CFInput 了。我一直在使用 jQuery Validation 插件,这样我就可以对其他事情进行验证,例如:
大多数验证规则可以内联添加到类参数中:
<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/