2011-06-07 26 views
5

我一直在Coldfusion中使用普通表单和输入字段一段时间,但最近发现cfinput标签会自动为我阻止一些xss攻击。这让我想知道,如果在ColdFusion中使用cffrom和cfinput比正常形式和输入标签有什么缺点。CFForm vs Coldfusion中的表格

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

因此,在短期:

什么是ColdFusion的使用CFFORM重于形式的优点和缺点?

+0

我很想知道你相信你从cfforms获得的XSS保护。我知道没有。 – 2011-06-07 20:03:32

+0

''导致无法从这里出现问题。我总觉得这个代码应该是开源的,所以人们可以独立地向前发展它。一种可能的方法是使用XML可换肤表单:http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7b0e.html,但我一直认为XSL是解决问题的方法。 – orangepips 2011-06-07 20:06:57

+0

@Jason AFAIK cfinput/cfselect/cftextarea中的所有value =“”都是xmlFormat()自动编辑的,就这些了。 – Henry 2011-06-07 20:08:30

回答

9

我更喜欢在我的表单中编写我自己的JS。我在当天就开始使用cfform,但最终想要做比cfform能够处理的更强大的事情(验证等)。这迫使我学习JS,自从写了自己的JS之后,我一直很开心。

所以我想我会说一个很大的缺点就是你仅限于cfform可以处理的东西。根据你的情况,这可能是好的。

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

它肯定会降低偏好。使用cfform或常规形式既不“正确”也不“错”。对我而言,我更喜欢能够进行手动操作所需的任何操作,因为没有任何限制/限制。

+0

我不想用cfinput来验证前端的表单,我更注重后端。每当我放入类似“”/>“转换为基本输入格式,它会结束输入并运行js,我必须使用HTMLEditFormat来防止这种情况发生,但是如果我使用cfinput,它将会像HTMLEditFormat那样转换符号,但我永远不需要实际调用HTMLEditFormat – corymathews 2011-06-07 19:49:40

+2

I' d仍然更喜欢自己添加HTMLEditFormat(),我想在其中添加它,这样,如果需要不使用它,我不必提出解决方法,但那就是我。在他的回应(我是释义),如果它适合你,使用它。在大多数情况下,“优势”或“劣势”将成为主观。 – charliegriefer 2011-06-07 19:56:09

+0

我与查理在这方面的客户我有很多场合CFFORM的JavaScript引起了其他脚本函数的问题,我也有一个问题,就是Adobe坚持要你手动破解cfform.js来创建一个需要的选择框。将使用CFFORM Server validateAt属性可以快速处理服务器端验证,如果它非常基本。 – 2011-06-16 13:28:15

5

我与<cfform> & <cfinput>有爱恨关系。

具有相同的XSS保护是CFFORM提供,只是包装htmlEditFormat()围绕价值= “” 经常像这样:

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

为了更好的保护XSS,使用OWASP Enterprise Security API(包括的.jar在一个的CF9最新修补程序)

我喜欢如何在不编写JS的情况下轻松完成Ajax化表单,但我讨厌它是如何生成大量丑陋的JavaScript并加载大量JS和css文件以获得相当简单的东西。所以我决定只对内部网站使用cfform,而不是面向公众的网站(性能问题)。

其他然后Ajax特性,接受CF布尔和填充选择与查询对象的属性checked是功能cfinputcfselect提供一种可以是非常有用的。

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

+1

您也可以使用''。请参阅http://stackoverflow.com/questions/3640156/is-xmlformat-always-better-than-htmleditformat – 2011-06-07 21:34:46

+0

@Ciaran是的,但'htmlEditFormat()'是cfinput使用的。 – Henry 2011-06-07 22:40:36

1

我很久没有使用过ColdFusion的CFInput了。我一直在使用jQuery验证插件,这样我可以在其他事情上一样执行验证:

  • 是元素可见? (即,如果不是必需的话,隐藏一个部分,但是如果没有显示则取消该要求。)
  • 是否选中了复选框?(即,您选中了“其他”,现在需要填空)。
  • 它是一个有效的日期/时间值吗? (即,我另外使用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验证库的详细信息的链接:为在14年

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

+0

当你将ColdFusion与jQuery结合在一起时,你会让所有的地狱散去,这真是太棒了!你已经完全掌握了jQuery。 – 2011-08-19 23:24:24

3

我一直在使用ColdFusion。 CF是这样一个踢屁股产品的原因是,让新用户在没有太多理解的情况下快速完成大量工作,并使火箭科学家能够快速构建真正强大和安全的应用程序。

CFFFORM,CFINPUT,CFLAYOUT,CFPOD是为新用户创建的标签。基本上,他们是训练轮子。如果你是网络开发新手,你应该试试这个标签。随着您获得经验,您需要放弃这些标签并转到其他技术来创建更强大的应用程序。

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

目前,我正在开发构建外部网站的ColdFusion 9/jQuery/SQL Server Intranet。我正在做,而不使用单个表单标签。而且,我正在使用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强大的一年!

祝你好运!