我的情况是,包含javascript的HTML内容通过编码的查询字符串发送到我的脚本。在接收.NET页面上,我需要response.clear并将查询字符串写入浏览器。
除了Chrome Inspector上的脚本标记内容似乎为空外,所有内容都可以正常写入。
有人知道这是什么样的巫术吗?
我试过了
response.write(html)
以及
Dim html As String = Request.QueryString("html")
Dim bytes As Byte() = Encoding.UTF8.GetBytes(html)
Response.ClearHeaders()
Response.Clear()
Response.Charset = "UTF-8"
Response.ContentType = "text/html"
Response.AddHeader("Content-Length", bytes.Length)
Response.OutputStream.Write(bytes, 0, bytes.Length)
但我的结果相同。这是某种安全实施吗?
答案 0 :(得分:0)
检查输入字符串中是否有非空格的不可打印字符。您可能无法在输出中看到这些,但浏览器中的解析器可能会生成语法错误,因为它们不是有效的空白字符。您必须检查原始字节(在您看到错误的代码周围)。
此外,您可能正在达到查询字符串的最大长度。它因浏览器而异。
Internet Explorer
RFC 3986也声明没有限制,但表示主机名是 由于DNS限制,限制为255个字符(第2.3.3节)。 Microsoft声明Internet Explorer中URL的最大长度 是2,083个字符,路径中不超过2,048个字符 网址的一部分。
Chrome和Firefox
没有官方文件,但测试结论是限制大约是64K
但是,我想说明你所做的是一个巨大的安全风险。你永远不应该只是毫不犹豫地渲染出整个查询字符串。