Для отправки обратно на себя со строкой запроса - PullRequest
0 голосов
/ 06 июня 2018

У меня есть

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

cgi.query_string входит с неопределенным числом переменных.Я пытался использовать

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

Должен ли я совершать какие-либо побеги?

1 Ответ

0 голосов
/ 11 июня 2018

Вы используете 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>

Как вы говорите, вы не можете этого сделать.Ваш конкретный вопрос заключался в том, следует ли вам бежать.Ответом будет «да», и местоположение будет на бэкэнде, анализируя строку запроса.

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

Отправит форму на ту же страницу с присутствующей областью ФОРМА, URLприсутствует область действия и определена строка CGI.query_string.CGI.query_string будет иметь форматирование URL (% 20 для пробела и т. Д.).Области FORM и URL уже будут декодированы (% 20 преобразован в пробел и т. Д.).

Похоже, суть вашего вопроса на самом деле касается безопасности и очистки.В этом случае вы захотите проверить encodeForHTML() ( Adobe Docs для encodeForHTML () ).

Очевидно, что это не на 100% надежно, так как я не знаюдетали вашего кода и что вы делаете с вводом.Но эти функции очистки должны быть хорошим началом.

Так что в общем случае, если вы используете область действия URL, используйте encodeForHTML(), а если вы используете #CGI.query_string#, она будет закодирована в URL.

...