fei*_*ong 2 java url jsp servlets
我有一个请求,在浏览器地址栏中输入:
http://localhost:8888/cmens-tops-outwear/t-b-f-a-c-s-fLoose-p-g-e-i-o.htm?'"--></style></script><script>netsparker(0x0000E1)</script>=
Run Code Online (Sandbox Code Playgroud)
Tomcat6.0.35
我已经设定 URIEncoding="UTF-8"
request.getQueryString()
在servlet中使用:
如果chrome
,我明白了
'%22--%3E%3C/style%3E%3C/script%3E%3Cscript%3Enetsparker(0x0000E1)%3C/script%3E=
Run Code Online (Sandbox Code Playgroud)
如果ie
,我明白了
'"--></style></script><script>netsparker(0x0000E1)</script>=
Run Code Online (Sandbox Code Playgroud)
为什么?
额外
我想request.getQueryString()
创建一个uri
URI uri = URI.create(url)
Run Code Online (Sandbox Code Playgroud)
如果是:
java.net.URISyntaxException: Illegal character in query at index 36: /cmens/t-b-f-a-c-s-f-p-g-e-i-o.htm?'"--></style></script><script>netsparker(0x0000E1)</script>
at java.net.URI$Parser.fail(URI.java:2809)
at java.net.URI$Parser.checkChars(URI.java:2982)
at java.net.URI$Parser.parseHierarchical(URI.java:3072)
at java.net.URI$Parser.parse(URI.java:3024)
at java.net.URI.<init>(URI.java:578)
at java.net.URI.create(URI.java:840)
Run Code Online (Sandbox Code Playgroud)
如何确定queryString是否已被编码?
该HttpServletRequest#getQueryString()
是每个未解码高清.另见javadoc(强调我的):
返回:
包含查询字符串的String;如果URL不包含查询字符串,则返回null.该值不会被容器解码.
基本上,如果您想手动解析它而不是getParameterXxx()
出于某种原因使用方法(这会隐式解码参数!),您需要自己对其进行URL解码.
String decodedQueryString = URLDecoder.decode(request.getQueryString(), "UTF-8");
Run Code Online (Sandbox Code Playgroud)
至于为什么Chrome在IE不发送时编码,这是因为Chrome在安全/正确处理HTTP请求方面做得更好.这超出了你的控制范围.如果您打算出于某种原因手动解析查询字符串,请始终自行对查询字符串进行URL解码.该URIEncoding="UTF-8"
配置有唯一的影响getParameterXxx()
时GET请求方法.
归档时间: |
|
查看次数: |
19286 次 |
最近记录: |