【发布时间】:2015-03-12 08:41:41
【问题描述】:
更新:2015-03-18 部分解决,请参阅下面的 cmets
通过纯 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
唯一编码的部分是第二个名称/值对 (name2=%3Cd) 的 VALUE(%3Cd) - ...对 URL 部分进行编码更糟糕...
特殊字符 (%3C) 是
如果该值中没有特殊字符,它将传递(编码与否)2061 个字符(即使 IIS 设置为 4096 并且这些更改反映在 web.config 中) 单独一个尖括号(
如果此行插入 Broswer URL 栏:(注意,缺少 C) http://localhost/sitename/apage.aspx?name1=value1&name2=%3d 有效地跳过了 javascript httpRequest,ResponseText 是:“value1=” 因此,第一个值成功,第二个值也是如此,因为 3D 是 '=' 符号(讨厌的巧合-哈哈,让我陷入了循环)。
%3Cd - 当 C 未被删除时...'[lessthan]d' 等于麻烦(duh!)。 黄色跟踪屏幕:从客户端检测到潜在危险的 Request.QueryString 值(name2=[lessthan]d)。 - 在 Trace 页面上没有提及错误 500。
为什么不取消验证机制?! ...我认为只需要编码?! ...为什么它会在 2061 年窒息?
请记住,在无数情况下,同步和异步都使用相同的机制而不会出现问题...只要不传递“危险”字符就没有问题。上面的 '='(3d) 示例和 2061 SUCCESS 表明此实例没有什么不同。
我不会随便发帖...我会在寻求帮助前 40 小时打破我的头,我已经阅读了整个互联网...(嗅嗅)! (年)
【问题讨论】:
标签: javascript validation xmlhttprequest query-string encode