使用查询字符串

时间:2018-06-06 18:06:52

标签: iis coldfusion urlencode coldfusion-2016

我有

<form action="?#cgi.query_string#" method="post" ...

cgi.query_string带有无限数量的变量。我尝试使用

<form action="?#EncodeForURL(cgi.query_string)#" method="post" ...

我应该做任何逃避吗?

1 个答案:

答案 0 :(得分:1)

您在表单标记中使用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>

正如你所说,你不能这样做。你的具体问题是你是否应该逃避。答案就是&#34;是&#34;并且位置将在后端,解析查询字符串。

<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格式(%20表示空格等)。 FORM和URL范围已经被解码(%20转换为空格等)。

您的问题的关键似乎是关于安全和消毒。在这种情况下,您需要检查encodeForHTML()Adobe Docs for encodeForHTML())。

显然,这并非100%万无一失,因为我不知道您的代码的详细信息以及您对输入的处理方式。但那些消毒功能应该是一个良好的开端。

一般来说,如果您使用网址范围,请使用encodeForHTML(),如果您使用#CGI.query_string#,则会使用网址编码。