Своеобразная ошибка с ColdFusion на BlueDragon.NET
У нас возникла странная проблема с ColdFusion в BlueDragon.NET. Запрашиваемая здесь из-за большого опыта пользователей Stackru.
Теги внутри POSTed-контента на сервер BlueDragon.NET удаляются, и мы не уверены, где в стеке он удаляется. Так, например, если мы публикуем эти данные
[CORE]
Lesson_Status=Incomplete
Lesson_Location=comm_13_a02_bs_enus_t17s06v01
score=
time=00:00:56
[Core_Lesson]
<sd ac="" pc="7.0" at="1289834380459" ct="" ><t id="lo8" sc=";;" st="c" /></sd>
<sd ac='' pc='7.0' at='1289834380459' ct='' ><t id='lo8' sc=';;' st='c' /></sd>
<sd ac="" pc="7.0" at="1289834380459" ct="" ><t id="lo8" sc=";;" st="c" /></sd>
<sd ac="" pc="7.0" at="1289834380459" ct="" ><t id="lo8" sc=";;" st="c" /></sd>
<b>hello1</b>
<i>hello2</i>
<table border><td>hello3</td></table>
<sd>hello4</sd>
<sd ac="1">hello5</sd>
<t>hello6</t>
<t />
<t attr="hello8" />
<strong>hello10</strong>
<img>
><>
Что мы получаем обратно это:
[CORE]
Lesson_Status=Incomplete
Lesson_Location=comm_13_a02_bs_enus_t17s06v01
score=
time=00:00:56
[Core_Lesson]
hello1
hello2
hello3
hello4
hello5
hello6
hello10
>
То есть все, что начинается с <
и заканчивается >
становится раздетым или отфильтрованным и больше не появляется в ColdFusion's FORM
объем, когда он размещен.
Наш сервер с BlueDragon JX не страдает этой проблемой.
Если мы обойдем по умолчанию FORM
В области действия и использования этого кода появляется содержимое в виде тегов:
<cfscript>
// get the content string of the raw HTTP headers, will include all POST content as a long querystring
RAWREQUEST = GetHttpRequestData();
// split the string on "&" character, each variable should now be separate
// note that at this point duplicate variables will get clobbered
RAWFORMFIELDS = ListToArray(RAWREQUEST.content, "&");
// We're creating a structure like "FORM", but better
BetterFORM = StructNew();
// Go over each of the raw form fields, take the key
// and add it as a key, and decode the value into the value field
// and trap the whole thing if for some reason garbage gets in there
for(i=1;i LTE ArrayLen(RAWFORMFIELDS);i = i + 1) {
temp = ListToArray(RAWFORMFIELDS[i], "=");
try {
tempkey = temp[1];
tempval = URLDecode(temp[2]);
StructInsert(BetterFORM, tempkey, tempval);
} catch(Any e) {
tempThisError = "Malformed Data: " & RAWFORMFIELDS[i];
// Log the value of tempThisError here?
// WriteOutput(tempThisError);
}
}
</cfscript>
<cfdump var="#BetterFORM#">
Если мы сделаем это, и использовать созданные BetterFORM
переменная, она есть, поэтому не возникает проблем с фильтрацией запросов в какой-то другой точке стека. Я думал, может быть, это был URLScan, но, похоже, не установлен. Поскольку BD.NET работает на.NET как движок, возможно, есть какой-то параметр очистки, который каким-то образом используется для всех переменных?
Предложения по этому вопросу приветствуются.
2 ответа
Это оказалось очень обыденным.
У нас был собственный тег, который выполнял пользовательские замены строк. На одном сервере он был изменен, чтобы НЕ заменять все теги. На этом сервере мы использовали более старую версию. Таким образом, ошибка не была разницей между BlueDragon JX и BlueDragon.NET - это была ошибка команды разработчиков.
У меня нет экземпляра BD.NET, который можно было бы проверить, но в Adobe ColdFusion есть настройка администратора cf для удаления "недопустимых тегов". Это мое лучшее предположение. Adobe CF заменяет их на "invalidTag", я думаю, что BD.Net просто удаляет его молча.