тип ввода coldfusion = ‘hidden’ не скрывается

#input #coldfusion #hidden #cfml

#ввод #coldfusion #скрытый #cfml

Вопрос:

У меня есть форма, которая передает переменные, и в ней много скрытых входных данных, за которыми следует отправка. Вот некоторый код:

 <input type = "hidden" name =  "templname" value =  '#templname#'>
<input type = "hidden" name =  "attloc"    value = '#extattloc#'>      
 <input type = "hidden" name =  "cctype"    value = 'f'>
 <input type = "hidden" name =  "merls"     value = '#merls#'>
  <input type = "hidden" name =  "invnum"    value = '#invnum#'>

  <cfif ArrayIsDefined(selvalarr,1)>
        <cfloop array = "#selvalarr#" index = "att"> 
           <input type = "hidden" name = "att" value ="#att#">
        </cfloop>
   </cfif>

   <cfloop array = "#letarr#" index = "let">
    <input type = "hidden" name =  "let" value = '#let#'>
   </cfloop>

     <input type   = "submit" 
           class   = 'repbutton onoffbut'  
           style   = 'height:75px;'             
           id      = "runemail"                             
           value   = "run email"  >
  </form>
  </td>  
  

Все так, как вы ожидали — за исключением цикла в letarr. Переменная #let # выгружается на страницу, хотя ввод явно скрыт. Вот как выглядит переменная «let» (2 значения). Этот вывод был получен из следующего кода:

 <cfloop array = "#letarr#" index = "let">
<br>#let#     
</cfloop>
  

введите описание изображения здесь

Вот что дает мне скрытый ввод:

введите описание изображения здесь

Там не должно быть ничего, кроме кнопки «запустить электронную почту».

Я выполнил прямой вывод массива «letarr», и он правильный (см. Выше). Я проверил, что наличие его внутри <td тега не является проблемой. Я думаю, что это что-то о переменной, возможно, о нескольких строках.

У кого-нибудь есть идея, что является причиной этого? или как это исправить?

Комментарии:

1. Может ли это быть связано с одинарными кавычками, которые вы заключаете #let# в: value='#let#'> . Закодировано ли значение параметра HTML таким образом, чтобы, если оно содержит символы HTML, это не нарушало вывод? Содержит ли он одинарные двойные кавычки?

2. Я использовал как одинарные, так и двойные кавычки — это не имеет значения. В выходных данных нет кавычек, хотя на это мне лучше обратить внимание. Конечно, возможно, что внутри этой переменной есть html-код. Как бы я закодировал параметр HTML?

3. Выполните поиск HTML в ColdFusion encode

4. Спасибо, ребята. Кодирование решило непосредственную проблему. Я не исследовал атаки XSS, поэтому я бы не знал об этом. Мне нужно что-то сделать с полями формы после прохождения, и я посмотрю, даст ли это мне то, что мне нужно. Но рад узнать о кодировке для HTML, несмотря ни на что.

Ответ №1:

Выполните пару шагов.

  1. Сделайте <cfdump var="#letarr#"> , чтобы убедиться, что нет неожиданных значений.

  2. Убедитесь, что переменные защищены от инъекций

     <cfloop array = "#letarr#" index = "let">
      <input type = "hidden" name =  "let" value = '#EncodeForHTMLAttribute(let)#'>
    </cfloop>
      
  3. Мне действительно интересно, есть ли в вашей строке недостающая кавычка или странная вещь, которая выглядит как кавычка. Я бы поискал обратную отметку, умную (или тупую) цитату и знак ударения или что-то в этомроде. Ваши результаты выглядят так, как будто он где-то отказался от HTML

Комментарии:

1. В HTML вполне могла быть какая-то цитата. EncodeForHTML решил непосредственную проблему отсутствия отправки через скрытый ввод. К сожалению, я не получил желаемых результатов на странице получения. Я попробую EncodeForHTMLAttribute и посмотрю, что получится.

Ответ №2:

Всегда старайтесь использовать encodeForHTML() , чтобы избежать подобных проблем.

Комментарии:

1. Я думаю, вы хотели сказать encodeforHTMLAttribute()