更新时间:2015-03-18部分解决方案见下面的评论
通过纯JavaScript(AJAX)请求将HTML发布到服务器,不使用AJAX库。
有人可以告诉我为什么会失败吗?即使它是编码的?
xmlhttpObj.open(“POST”,“apage.aspx?name1 = value1& name2 =%3Cd”,true);
内部服务器错误500 - 无法加载资源
WIN 7,IIS7,Chrome,纯javascript [请,没有JQuery或其他] 这是一个javascript xmlhttpRequest open / POST / send();异步(或同步,都失败) 在web.config和page指令中对httpRuntimeValidationMode = 2.0和pages requestValidate = false进行了更改,所有FRAMEWORK都安装到4.0
编码的唯一部分是第二个名称/值对的值(%3Cd)(name2 =%3Cd) - ...编码URL部分更糟糕......
特殊字符(%3C)是< char和d是div标签的第一个char ...将HTML发布到服务器。
如果该值中没有特殊字符,则它传递(编码或不编码)2061个字符(即使IIS设置为4096并且这些更改反映在web.config中) 仅一个角括号(<)通过!?因此需要2个字符(%3Cd)才能打破它。
如果此行插入Broswer URL栏:(注意,缺少C) http://localhost/sitename/apage.aspx?name1=value1&name2=%3d 有效地跳过javascript httpRequest,ResponseText是:“value1 =” 因此,第一个值成功,第二个值也成功,因为3D是'='符号(令人讨厌的巧合 - 大声笑,让我循环)。
%3Cd - 当C没有被移除时......'[lessthan] d'等于麻烦(呃!)。 黄色跟踪屏幕:从客户端检测到一个潜在危险的Request.QueryString值(name2 = [lessthan] d)。 - 在跟踪页面上没有提到错误500.
为什么不取消验证机制?! ......我认为只需要编码吗?! ......为什么它会在2061年窒息?
请记住,在无数个实例中同时使用相同的机制,同步和异步......只要没有传递“危险”字符就没有问题。上面的'='(3d)示例和2061 SUCCESS显示此实例没有什么不同。
我不会毫不犹豫地发帖......在我求助之前40小时我会打破我的头脑,我已经阅读了整个互联网...(嗅闻)! (t.y。)
答案 0 :(得分:0)
...不确定这是否是正确或可接受的方式,但通过对'<'进行'替换'来解决问题TEMPORARILY有一个'独特的3个字符安全字符串',我可以随意解码...而且我相信我必须为其他字符做到这一点,这将失败这个过程。
我更喜欢坚实的公认解决方案。 ...以及queryString长度等其他相关问题也未得到解决 t.y。