我在coldfusion中使用普通表单和输入字段已经有一段时间了,但是最近我发现cfinput标记可以自动防止xss攻击。这让我想知道,在coldfusion中使用cffrom和cfinput是否有什么缺点。
我在短时间内发现的唯一缺点是,它向页面添加了2个外部样式表和1个脚本标记。
因此,简而言之:
在coldfusion中使用CFFORM的优点和缺点是什么?
发布于 2011-06-07 19:35:41
我更喜欢在我的表格上写我自己的JS。我最初是从cfform开始的,但最终想要做一些比cfform能够处理的更健壮的事情(验证等)。这迫使我学习JS,从那以后,我一直很高兴写自己的JS。
因此,我想我要说的是,一个大缺点是,您仅限于cfform所能处理的内容。取决于你的情况,这可能会很好。
我很久以前遇到的另一个缺点(公平地说,可能已经解决了)是,由cfform生成的JS会与我手写的JS发生冲突或干扰。
这当然可以归结为偏好。使用cfform或常规形式既不是“对”也不是“错”。对我来说,我更喜欢手动进行任何操作,因为没有任何限制/限制。
发布于 2011-06-07 19:51:43
我和<cfform> & <cfinput>有着一种爱恨的关系。
要具有CFFORM提供的相同的xss保护,只需将htmlEditFormat()包装在value="“周围,如下所示:
<input name="x" value="#htmlEditFormat(x)#">为了更好地保护XSS,请使用OWASP企业安全API (包括在CF9最新修补程序中的.jar)。
我喜欢在不编写JS的情况下轻松地完成ajaxified,但我讨厌它如何生成许多丑陋的JavaScript,并为一些相当简单的东西加载大量的JS和css文件。因此,我决定只对内部站点使用cfform,而不对面向公众的站点使用cfform(性能问题)。
除了ajax特性之外,接受CF布尔值并使用查询对象填充select的checked属性是cfinput和cfselect提供的非常有用的特性。
为正确的工作使用正确的工具。如果您发现<cfform>的特性有用,请使用它。只要知道它的局限性,自己决定。
发布于 2011-08-19 23:54:34
我已经使用ColdFusion将近14年了。CF之所以是一个令人兴奋的产品,是因为它使新用户能够在不太了解的情况下快速完成大量工作,并使火箭科学家能够快速构建真正强大和安全的应用程序。
CFFFORM、CFINPUT、CFLAYOUT、CFPOD是为新用户创建的标记。基本上,他们是训练轮。如果你是网络开发的新手,你应该尝试一下这个标签。随着您获得经验,您将希望放弃这些标记,转而使用其他技术来创建更健壮的应用程序。
这些标签没什么问题,就像训练轮没有问题一样。你只需要知道每个工作都有一个合适的工具。实际上,每个工作都有很多合适的工具。
目前,我正在开发一个构建外部网站的ColdFusion 9/ jQuery / 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强大的一年!
祝好运!
https://stackoverflow.com/questions/6270528
复制相似问题