我必须处理那些非常丑陋和大量的ColdFusion代码,直到今天,这些代码都是通过生产服务器上的直接修改来维护的(不要问).我设法从欺骗和备份中清理它并将其放入Subversion,现在我需要选择一个make系统才能将其置于持续构建(TeamCity)和预定版本中.令我惊讶的是,我只发现了一篇关于如何用Maven改造CF项目的博客文章,所以问题是 - 有没有人有成功使用Maven在CF上的经验以及一般人用来管理大型CF项目的经验?您的建议,提示和链接将非常受欢迎因为我不想开始宗教战争 - Maven几乎是公司标准(vs Ant)
是否有任何已知的NetBeans插件用于ColdFusion脚本的编辑,格式化和颜色编码?
在ColdFusion方面,如何防止SQL注入?我对语言/框架很陌生.
这是我的示例查询.
<cfquery name="rsRecord" datasource="DataSource">
SELECT * FROM Table
WHERE id = #url.id#
</cfquery>
Run Code Online (Sandbox Code Playgroud)
我认为传递url.id风险.
为了允许ColdFusion显示其错误而不仅仅是服务器错误(代码500),我已根据本网站的一些调查结果添加到web.config中.
问题看起来已经解决但......
当我访问IIS中的一个不存在的目录时,它返回一个没有任何状态代码的"空白"页面.如果我将它从passthrough设置回auto,IIS将再次获取错误页面,并且不再显示ColdFusion错误.
有人有解决方案吗?我做了一些研究并"怀疑"JWildcardhandler可能是问题,但我找不到解决方案.
非常感激!
目标是允许使用脚本而不是CFML标记定义.cfm或.cfc的所有函数.
我想改变这个:
<cffunction name="foo" access="remote">
<cfscript>
....
</cfscript>
</cffunction>
Run Code Online (Sandbox Code Playgroud)
进入这样的事情:
<cfscript>
function remote foo() {
....
}
</cfscript>
Run Code Online (Sandbox Code Playgroud)
或其他东西,只要它可以在打开和关闭cfscript标签内完成.
我花了差不多一个小时试图找出一个总是返回一个空字符串的列表的问题.我正在使用ListAppend就像使用ArrayAppend或StructInsert,但显然ListAppend的工作方式不同.如果有的话,ListAppend的工作原理与其他一切有什么不同?
<cfset ListAppend(list, item)>
Run Code Online (Sandbox Code Playgroud)
list =''
<cfset ArrayAppend(array, item)>
Run Code Online (Sandbox Code Playgroud)
array [1] = item
<cfset StructInsert(struct, 'key', item)>
Run Code Online (Sandbox Code Playgroud)
struct.key = item
我的老板要我使用cfscript而不是标签进行数据库交互.有人知道任何好的教程吗?我购买了Adobe ColdFusion应用程序开发书,第2卷.但它在脚本编写方面没有太多内容.我做谷歌并找到了这个网站,但它没有解释太多.
有没有人知道有关访问CFScript数据库的任何好教程?
基本上我必须将以下内容转换为使用CFScript:
<cfquery name="drafts" datasource="ICEchat">
SELECT * from Messages where IsTemp=1 and LinkA=#FORM.LinkA# and LinkB=#FORM.LinkA#
</cfquery>
<cfif drafts.recordcount GT '0'>
<cfquery name="Attachments" datasource="ICEchat">
SELECT * FROM Attachments where id=2
</cfquery>
{ Message:"<cfoutput query="drafts">#Message#</cfoutput>", Attachments:[<cfoutput query="attachments">
"#url#"<cfif attachments.currentRow LT attachments.recordcount>,</cfif>
</cfoutput>]}
<cfelse>
<cfquery name="addrecord" datasource="ICEchat">
INSERT INTO Messages
VALUES(1,1,' ',1)
</cfquery>
{ Message:"NA", Attachments:[]}
</cfif>
Run Code Online (Sandbox Code Playgroud) 我为客户开发了一个网站,他们将在线发布商品图片.网址是www.domiainname.com/item-details.cfm?sku=125.有人试图浏览www.domiainname.com/item-details.cfm?sku=125%20and%203=3我收到通知的产生和错误.
我还收到了错误报告:
item-details.cfm?sku=1291+or+1=@@version--
item-details.cfm?sku=1291'+or+1=@@version
item-details.cfm?sku=1291+or+1=@@version
Run Code Online (Sandbox Code Playgroud)
最后三个例子肯定是有人试图进入系统,对吧?
如果我们将此转换为存储过程,是否会降低或消除插入攻击的风险?
我正在使用以下ColdFusion代码计算已用内存.
runtime = CreateObject("java", "java.lang.Runtime").getRuntime();
Run Code Online (Sandbox Code Playgroud)
然后在循环中我执行以下操作来计算已用内存.
var usedGB = (runtime.totalMemory() - runtime.freeMemory()) / 1024.^3; // bytes -> KB -> MB -> GB
Run Code Online (Sandbox Code Playgroud)
这告诉我从我的页面开始就使用了近200 MB.这是CF服务器使用了多少,或者这只是我页面的一些开销?
我很好奇为什么会这样.我现在已经遇到过两次了,经过大量的谷歌搜索后,我找不到任何我理解的理由.它的要点:
查询1:selectContent(6条记录;没有空格/空值等)
查询2:selectPricing(5条记录;没有空格/空值等)
输出:
<cfloop query="selectContent">
<section>
#selectContent.h2#
<cfif selectContent.id eq 3>
<cfloop query="selectPricing" group="groupCol">
<table class="pricing">
<thead>
<tr>
<th>#description#</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<cfloop>
<tr>
<td>#selectPricing.description#</td>
<td>#selectPricing.price#</td>
</tr>
</cfloop>
</tbody>
</table>
</cfloop>
</cfif>
#selectContent.content#
</section>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
这将产生以下错误:数组索引超出范围:5
仅当第二个查询的记录少于第一个查询时才会出现此错误.基本上感觉就像第一个cfloop从第二个接管循环迭代,这导致了问题,但也只有当你有第三个分组cfloop.整个内部cfloop运行,就像在源中一样.
我想出了两种方法来解决这个问题:
那么,有两个问题:
为什么会发生这种情况?
我是否应该在这里使用一种完全不同的方法(谷歌/因此没有找到其他人这个问题的事实似乎肯定暗示......)?
编辑 我已根据Adam Cameron的反馈将此作为Coldfusion错误提交.Bug#3820049