我们在BlueDragon.NET上使用ColdFusion时遇到了一个奇怪的问题。因为StackOverflow用户的丰富经验而在这里问。
将POSTD内容中的标签移出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的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上作为引擎运行,或许有一些清理设置以某种方式用于所有变量?
欢迎就此问题提出建议,想法等。
答案 0 :(得分:2)
我没有方便检查的BD.NET实例,但Adobe ColdFusion在cf管理员中有一个设置来删除“无效标签”。这是我最好的猜测。 Adobe CF用“invalidTag”替换它们,我的猜测是BD.Net只是默默地剥离它。
答案 1 :(得分:0)
事实证明这是非常平凡的。
我们有一个自定义标签,可以自定义字符串替换。在一台服务器上,它被修改为不替换所有标签。在这台服务器上,我们使用的是旧版本。所以错误不是BlueDragon JX和BlueDragon.NET之间的区别 - 这是开发团队的错误。