net-6ren">
gpt4 book ai didi

java request.getQueryString() 值在 chrome 和 ie 浏览器之间不同

转载 作者:行者123 更新时间:2023-11-30 06:25:58 25 4
gpt4 key购买 nike

我有一个请求,在浏览器地址栏输入:

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>=

Tomcat6.0.35我设置了URIEncoding="UTF-8"

使用 request.getQueryString()在 servlet 中:

如果chrome , 我明白了

'%22--%3E%3C/style%3E%3C/script%3E%3Cscript%3Enetsparker(0x0000E1)%3C/script%3E=

如果ie ,我明白了

'"--></style></script><script>netsparker(0x0000E1)</script>=

为什么?

额外的

我想得到 request.getQueryString()创建一个 uri

URI uri = URI.create(url)

如果即:

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)

如何判断queryString是否已经编码?

最佳答案

HttpServletRequest#getQueryString()根据定义未解码。另见 javadoc (强调我的):

Returns:

a String containing the query string or null if the URL contains no query string. The value is not decoded by the container.

基本上,如果您想手动解析它而不是出于某种原因使用 getParameterXxx() 方法(隐式解码参数!),您需要自己对其进行 URL 解码。

String decodedQueryString = URLDecoder.decode(request.getQueryString(), "UTF-8");

至于为什么 Chrome 发送编码而 IE 不发送,那是因为 Chrome 在以安全/正确的方式处理 HTTP 请求方面做得更好。这是你无法控制的。如果您出于某种原因打算手动解析查询字符串,请始终自己对查询字符串进行 URL 解码。 URIEncoding="UTF-8" 配置只对 GET 请求期间的 getParameterXxx() 方法有影响。

关于java request.getQueryString() 值在 chrome 和 ie 浏览器之间不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15004593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com