从9升级到Coldfusion 10后,空表单操作不再自行运行

时间:2014-11-06 19:19:45

标签: forms coldfusion coldfusion-10

我经常在表单操作属性中使用空值来将表单提交回自身。这对我来说已经使用CF7和CF9多年了。最近,我更新到CF10 Update 14,当提交带有空操作字符串的表单时,我的本地开发环境和生产服务器现在都转到站点根目录而不是当前模板。这两种环境都使用IIS 7.5。是否有可以更改此行为的配置,或者我们是否无法再将空字符串作为表单操作传递给同一模板?

3 个答案:

答案 0 :(得分:2)

我不知道配置更改,但您可以action="#cgi.script_name#?#cgi.query_string#"使其工作原理相同。

答案 1 :(得分:2)

如果CF出错,那是因为<CFFORM>

我不认为你可以采取任何措施来解决这个问题,但这里有一个解释,如果你确实向CF提交了一个错误,这里有一个很好的总结我想是证据。

在所有测试中测试此代码:

<cfform action="" method="post">
  <input type="hidden" name="submitted_" value="true" />
  <input type="submit" value="blank action" />
</cfform>

<Br><Br><br><br>

<cfform method="post">
  <input type="hidden" name="submitted" value="true" />
  <input type="submit" value="no action" />
</cfform>

<Br><Br><br><br>

<cfform method="post" action="foo.cfm">
  <input type="hidden" name="submitted" value="true" />
  <input type="submit" value="foo.cfm action" />
</cfform>

<cfoutput>CF Version: #Server.ColdFusion.ProductVersion#</cfoutput>

CFLive使用CF 9.0.2,空白/无动作结果相同。

<form name="CFForm_1" id="CFForm_1" method="post" onsubmit="return _CF_checkCFForm_1(this)">
<input type="hidden" name="submitted_" value="true" />
<input type="submit" value="blank action" />
</form>
<Br><Br><br><br>
<form name="CFForm_2" id="CFForm_2" method="post" onsubmit="return _CF_checkCFForm_2(this)">
<input type="hidden" name="submitted" value="true" />
<input type="submit" value="no action" />
</form>
<Br><Br><br><br>
<form name="CFForm_3" id="CFForm_3" action="foo.cfm" method="post" onsubmit="return _CF_checkCFForm_3(this)">
<input type="hidden" name="submitted" value="true" />
<input type="submit" value="foo.cfm action" />
</form>

TryCF.com使用CF10.0.12并在空白/无操作中插入值。 &#x2f; = /

<form name="CFForm_1" id="CFForm_1" action="&#x2f;getremote.cfm" method="post" onsubmit="return _CF_checkCFForm_1(this)">
  <input type="hidden" name="submitted_" value="true" />
  <input type="submit" value="blank action" />
</form>
<Br><Br><br><br>
<form name="CFForm_2" id="CFForm_2" action="&#x2f;getremote.cfm" method="post" onsubmit="return _CF_checkCFForm_2(this)">
  <input type="hidden" name="submitted" value="true" />
  <input type="submit" value="no action" />
</form>
<Br><Br><br><br>
<form name="CFForm_3" id="CFForm_3" action="foo.cfm" method="post" onsubmit="return _CF_checkCFForm_3(this)">
  <input type="hidden" name="submitted" value="true" />
  <input type="submit" value="foo.cfm action" />
</form>

CF版本:10.0.12,286680

当然,如果TryCF的某些人在某些标签上运行某些安全控制,那么很难说,但是,foo.cfm并没有受到干扰,而且{{{ 1}}标签不会受到干扰,因此可能不是处理安全问题的情况。


我目前无法访问ACF服务器,因此无法对自己进行测试。


为了记录,这里是上面代码的铁路输出。由于与CF 10大部分兼容,因此Railo通常将自身标识为CF 10以进行交叉兼容性版本检查。

但是,

Railo会将空白操作留空,但如果未指定,则不会遗漏动作属性。

我确实省略了所有输出样本中的javascript,这里没有相关内容,而且已经单调,足以阅读:)。

<form>

对于可能遇到此问题的其他人,像Notepad ++这样具有复杂正则表达能力的程序,以及预先备份,这个正则表达式可以为您提供帮助。

查找没有操作属性的所有<form onsubmit="return railo_form_47.check();" name="CFForm_47" action="" method="post"> <input type="hidden" name="submitted_" value="true" /> <input type="submit" value="blank action" /> </form> <Br><Br><br><br> <form onsubmit="return railo_form_48.check();" name="CFForm_48" action="/railo/CAE86C59-B0B7-4FD6-894B1F178CEB6404.cfm?showdebugoutput=false" method="post"> <input type="hidden" name="submitted" value="true" /> <input type="submit" value="no action" /> </form> <Br><Br><br><br> <form onsubmit="return railo_form_49.check();" name="CFForm_49" action="foo.cfm" method="post"> <input type="hidden" name="submitted" value="true" /> <input type="submit" value="foo.cfm action" /> </form> CF Version: 10,0,0,0 或空白

<cfform>

最后,这应该是为了消除空洞的行为并重新开始像雷蒙德所建议的那样。

<cfform((?![^>]*action\s*=\s*("[^"]+"|'[^']+')))([^>]*)>

答案 2 :(得分:0)

还有一个项目是使用Mura CMS中的mura标签包含这些表格。

经过多次测试后,我发现当我使用标准表单标签并包含方法属性时,它可以正常工作。

<cfif structKeyExists(form, "foo") and form.foo neq "">
    <cfdump var="#form#">
<cfelse>
    <form action="" name="test" method="post">
       <input type="text" name="foo">
       <input type="submit" name="submit" value="submit">
   </form>
</cfif>

如果我删除方法=&#34; post&#34;属性,我返回到表单并且不显示转储。

<cfif structKeyExists(form, "foo") and form.foo neq "">
    <cfdump var="#form#">
<cfelse>
    <form action="" name="test">
        <input type="text" name="foo">
        <input type="submit" name="submit" value="submit">
    </form>
</cfif>

如果我将上述代码更改为cfform标记,则操作将被修改为/index.cfm。我觉得这可能是由于重写规则已经到位,但我不确定为什么切换到cfform会产生这种效果。

添加方法=&#34; post&#34; cfform标签的属性产生相同的结果。

在Mura之外我发现了以下内容:

使用原始表单标签,方法=&#34; post&#34;属性按预期工作。

删除方法=&#34; post&#34;属性重新加载表单并且不显示转储,与在Mura中作为display_object包含时的行为相同。

切换到cfform标签可正常使用方法=&#34; post&#34;属性。删除方法=&#34; post&#34;也可以正常工作,因为cfform自己将其添加回来作为默认值(如果不包含它)。

最终,这种行为在CF9和CF10之间发生了变化。