Forms 从9升级到Coldfusion 10后,空表单操作不再转到self

Forms 从9升级到Coldfusion 10后,空表单操作不再转到self,forms,coldfusion,coldfusion-10,Forms,Coldfusion,Coldfusion 10,我经常在表单操作属性中使用空值将表单提交回自身。多年来,我一直使用CF7和CF9。最近,我更新为CF10 Update 14,当提交带有空操作字符串的表单时,我的本地开发环境和生产服务器现在都转到站点根目录而不是当前模板。这两个环境都使用IIS 7.5。是否存在可以更改此行为的配置,或者我们不再能够将空字符串作为表单操作传递给同一模板以将表单提交到同一模板?我不知道是否有配置更改,但您可以执行操作=“#cgi.script_name#?#cgi.query_string#”使其正常工作。我不知道

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

我不知道是否有配置更改,但您可以执行
操作=“#cgi.script_name#?#cgi.query_string#”
使其正常工作。

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

如果CF有故障,则是因为

<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>
我不认为你能做什么来修复这个问题,但这里有一个解释,如果你向CF提交了一个bug,我认为这里有一个很好的证据总结

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

<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>
CF版本:10.0.12286680

当然,很难说是TryCF的人对某些标签进行了安全控制,但是,foo.cfm不受干扰,普通的
标签也不受干扰,因此可能不需要处理安全问题


我目前没有访问ACF服务器的权限,因此无法测试自己


为了记录在案,这里是railo对上述代码的输出。由于主要与CF 10兼容,Railo通常将自己标识为CF 10以进行交叉兼容性版本检查

但是,Railo会将一个空操作留空,但如果未指定操作属性,则不会将其留空

我确实从所有输出示例中省略了javascript,这与本文无关,而且已经足够单调,可以阅读:)










CF版本:10,0,0,0

对于可能有此问题的任何其他人,如具有复杂正则表达式功能的记事本+,以及提前备份,此正则表达式可以为您提供帮助

查找没有操作属性或为空的所有

<cfform((?![^>]*action\s*=\s*("[^"]+"|'[^']+')))([^>]*)>
]*action\s*=\s*(“[^”]+“[^”]+”)([^>]*)>
最后,这应该可以去除空动作,并像雷蒙德建议的那样重新填充动作

Find: <cfform([^>]*)(?:\s*action\s*=\s*(?:""|'')\s*)([^>]*)*>
Replace: \<cfform action="\#cgi\.script\_name\#?\#cgi\.query\_string\#" \1 \2\>
Find:::]*)(?:\s*动作\s*=\s*(?:“”|“”)([^>]*)*)*>
替换:\

如果CF出现故障,那是因为

我不认为你能做什么来修复这个问题,但这里有一个解释,如果你向CF提交了一个bug,我认为这里有一个很好的证据总结

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

<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>
CF版本:10.0.12286680

当然,很难说是TryCF的人对某些标签进行了安全控制,但是,foo.cfm不受干扰,普通的
标签也不受干扰,因此可能不需要处理安全问题


我目前没有访问ACF服务器的权限,因此无法测试自己


为了记录在案,这里是railo对上述代码的输出。railo主要与CF 10兼容,通常将自己标识为CF 10以进行交叉兼容版本检查

但是,Railo会将一个空操作留空,但如果未指定操作属性,则不会将其留空

我确实从所有输出示例中省略了javascript,这与本文无关,而且已经足够单调,可以阅读:)










CF版本:10,0,0,0

对于可能有此问题的任何其他人,如具有复杂正则表达式功能的记事本+,以及提前备份,此正则表达式可以为您提供帮助

查找没有操作属性或为空的所有

<cfform((?![^>]*action\s*=\s*("[^"]+"|'[^']+')))([^>]*)>
]*action\s*=\s*(“[^”]+“[^”]+”)([^>]*)>
最后,这应该可以去除空动作,并像雷蒙德建议的那样重新填充动作

Find: <cfform([^>]*)(?:\s*action\s*=\s*(?:""|'')\s*)([^>]*)*>
Replace: \<cfform action="\#cgi\.script\_name\#?\#cgi\.query\_string\#" \1 \2\>
Find:::]*)(?:\s*动作\s*=\s*(?:“”|“”)([^>]*)*)*>
替换:\

还有一项同样重要的内容,即这些表格是使用mura CMS中的mura标签包含的文件

经过几次测试,我发现当我使用标准表单标记并包含method属性时,它工作正常

<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>

如果我删除method=“post”属性,我将返回表单,并且不会显示转储

<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>

如果我将上述代码更改为us cfform标记,则操作将被修改为/index.cfm。我觉得这可能是因为重写了现有的规则,但我不确定为什么切换到cfform会有这种效果

将method=“post”属性与cfform标记一起添加会产生相同的结果

在Mura之外,我发现了以下几点:

使用带有method=“post”属性的本机表单标记可以正常工作

删除method=“post”属性会重新加载表单,并且不会显示转储,这与在Mura中作为显示对象包含时的行为相同

切换到cfform标记可以与method=“post”属性一起正常工作。Removing method=“post”还起到cfform的作用,如果不包括它,它将自己作为默认值添加回去


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

还有一项同样起作用的是,这些表单包含在使用mura CMS中的mura标记的文件中

经过几次测试,我发现当我使用标准表单标记并包含method属性时,它工作正常

<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>

如果我删除method=“post”属性,我将返回表单,并且不会显示转储

<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>

如果我改变了上述公司