用于使用查询字符串回发自身
For posting back on itself with query string
我有
<form action="?#cgi.query_string#" method="post" ...
cgi.query_string
带有不确定数量的变量。我尝试使用
<form action="?#EncodeForURL(cgi.query_string)#" method="post" ...
我应该进行任何类型的转义吗?
您正在表单标签中使用 method="POST"
。所以你试图让一个页面同时包含查询字符串(URL 范围)和表单主体(FORM 范围),对吗?
我不确定这是最佳做法,甚至某些浏览器是否允许(我在别处读到它们会在 POST 操作中删除查询字符串)。
最好的解决方案可能是使操作成为 GET 或 POST,然后遍历查询字符串,使每个项目成为隐藏输入?
<cfloop list="#CGI.query_string#" delimiters="&" index="i">
<input
type='hidden'
name='#listFirst(i, "=")#'
value='#listLast(i, "=")#'
/>
</cfloop>
正如你所说,你不能这样做。您的具体问题是您是否应该进行任何转义。答案是 "yes",位置将在后端,解析查询字符串。
<cfoutput>
<form action='?#CGI.query_string#' method='POST' class='form-horizontal bordered-group' role='form' id='test'>
<input
class='form-control'
type='text'
name='formvar'
/>
<input
class="btn btn-primary btn-lg btn-block"
type="submit"
value="Submit"
/>
</form>
</cfoutput>
将向同一页面提交表单,存在 FORM 范围,存在 URL 范围,并定义 CGI.query_string。 CGI.query_string 将具有 url 格式(space 为 %20,等等)。 FORM 和 URL 作用域已经被解码(%20 转换为 space,等等)。
看来您问题的症结在于安全和消毒。在这种情况下,您需要检查 encodeForHTML()
(Adobe Docs for encodeForHTML()).
显然,这不是 100% 万无一失的,因为我不知道您的代码细节以及您对输入的处理方式。但是那些消毒功能应该是一个好的开始。
所以一般来说,如果你使用URL范围,就使用encodeForHTML()
,如果你使用#CGI.query_string#
,它将被URL编码。
我有
<form action="?#cgi.query_string#" method="post" ...
cgi.query_string
带有不确定数量的变量。我尝试使用
<form action="?#EncodeForURL(cgi.query_string)#" method="post" ...
我应该进行任何类型的转义吗?
您正在表单标签中使用 method="POST"
。所以你试图让一个页面同时包含查询字符串(URL 范围)和表单主体(FORM 范围),对吗?
我不确定这是最佳做法,甚至某些浏览器是否允许(我在别处读到它们会在 POST 操作中删除查询字符串)。
最好的解决方案可能是使操作成为 GET 或 POST,然后遍历查询字符串,使每个项目成为隐藏输入?
<cfloop list="#CGI.query_string#" delimiters="&" index="i">
<input
type='hidden'
name='#listFirst(i, "=")#'
value='#listLast(i, "=")#'
/>
</cfloop>
正如你所说,你不能这样做。您的具体问题是您是否应该进行任何转义。答案是 "yes",位置将在后端,解析查询字符串。
<cfoutput>
<form action='?#CGI.query_string#' method='POST' class='form-horizontal bordered-group' role='form' id='test'>
<input
class='form-control'
type='text'
name='formvar'
/>
<input
class="btn btn-primary btn-lg btn-block"
type="submit"
value="Submit"
/>
</form>
</cfoutput>
将向同一页面提交表单,存在 FORM 范围,存在 URL 范围,并定义 CGI.query_string。 CGI.query_string 将具有 url 格式(space 为 %20,等等)。 FORM 和 URL 作用域已经被解码(%20 转换为 space,等等)。
看来您问题的症结在于安全和消毒。在这种情况下,您需要检查 encodeForHTML()
(Adobe Docs for encodeForHTML()).
显然,这不是 100% 万无一失的,因为我不知道您的代码细节以及您对输入的处理方式。但是那些消毒功能应该是一个好的开始。
所以一般来说,如果你使用URL范围,就使用encodeForHTML()
,如果你使用#CGI.query_string#
,它将被URL编码。