图解http xss攻击url中加号+问题
页码: P215
服务器后台程序通过url中指定的ID查询字段来获取到ID值,并原文不动得显示在了页面中。
问题: 在url中出现了+
,但是到了html中换成了空格。
原因:
W3C标准规定,当Content-Type
为application/x-www-form-urlencoded
时(也就是提交表单),URL中查询参数名和参数值中空格要用加号+
替代。
在HTML 4.01规范中就明确规定了:当content-type为application/x-www-form-urlencoded时,对names和values进行转义,空格用’+'代替。
可以手动验证下:
https://www.baidu.com/s?ie=UTF-8&wd=abc+def
补充:
一
另一份规范(RFC 2396,定义URI)里, URI里的保留字符都需转义成%HH格式(Section 3.4 Query Component),因此空格会被编码成%20
所以这种格式的url也可以:
https://www.baidu.com/s?ie=UTF-8&wd=abc%20def
二
如果就是希望html中出现的是+
而不是空格呢?
可以将+
编码成%2B
:
https://www.baidu.com/s?ie=UTF-8&wd=abc%2Bdef
更多
如果查看tomcat的源码,可以发现它会把加号换成空格
这里更详细:
http请求中加号被替换为空格?源码背后的秘密_why技术的博客-CSDN博客