#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:
Выполните пару шагов.
-
Сделайте
<cfdump var="#letarr#">
, чтобы убедиться, что нет неожиданных значений. -
Убедитесь, что переменные защищены от инъекций
<cfloop array = "#letarr#" index = "let"> <input type = "hidden" name = "let" value = '#EncodeForHTMLAttribute(let)#'> </cfloop>
-
Мне действительно интересно, есть ли в вашей строке недостающая кавычка или странная вещь, которая выглядит как кавычка. Я бы поискал обратную отметку, умную (или тупую) цитату и знак ударения или что-то в этомроде. Ваши результаты выглядят так, как будто он где-то отказался от HTML
Комментарии:
1. В HTML вполне могла быть какая-то цитата. EncodeForHTML решил непосредственную проблему отсутствия отправки через скрытый ввод. К сожалению, я не получил желаемых результатов на странице получения. Я попробую EncodeForHTMLAttribute и посмотрю, что получится.
Ответ №2:
Всегда старайтесь использовать encodeForHTML()
, чтобы избежать подобных проблем.
Комментарии:
1. Я думаю, вы хотели сказать
encodeforHTMLAttribute()