我们有一个托管在jboss上的servlet,它可以在HttpServletRequest上运行。但有时候我们收到的请求没有被jboss解码,当我们在HttpServletRequest上执行getQueryParam时,我们得到null。 jboss访问日志以编码形式显示url。通常,当一切顺利进行时,url会在访问日志中显示为已解码。 e.g:
这是一个有问题的要求:
127.0.0.1 [13/Apr/2009:14:18:53 +0000] GET /redirectService//%3Fclient_id=3&redirect_url=http%253A%252F%252Fwww.amazon.de%252Fgp%252Fsearch%253Fie%253DUTF8%2526keywords%253DMicrosoft+Office+2007%2526search-alias%253Dsoftware%2526 HTTP/1.1 'null' 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12)'
这是一个正确的要求:
127.0.0.1 [13/Apr/2009:14:19:37 +0000] GET /redirectService//?client_id=3&redirect_url=http%3A%2F%2Fwww.amazon.de%2Fgp%2Fsearch%3Fie%3DUTF8%26keywords%3DMAGIX+Video+deluxe+2008%26search-alias%3Dsoftware%26 HTTP/1.1 'http://www.google.de/search?hl=de&q=magix+video+deluxe+2008&meta=&aq=3&oq=%22magix%22' 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322)'
我们可能会遗漏一些jboss解码设置,还是仅仅是恶意用户的情况?
答案 0 :(得分:0)
很难说,真的。
客户端似乎将问号解码为“%3F”而不是“&”符号。可疑,不是吗?这看起来像一个有缺陷的客户IMO。也许是不可移植的javascript,也许是网络服务器端的一些URL重写错误,或者是一个更深奥的原因......一个有故障的浏览器插件。
要排除非便携式javascript,请记录用户代理并比较结果。要排除url-rewriting bug,请记录referer。
AFAIK,URL解码器行为是硬编码的。如果uri用非ascii或非iso88591编写,字符串编码可以改变,但这不是你想要的。什么编码问号,但未能编码&符号逃脱了我。
答案 1 :(得分:0)
我们记录了用户代理,在大多数情况下它是一些可疑的“XXXagentXXX”,但在其他情况下是一个真正的Mozilla(如上所述)。对于所有这些请求,推荐人都是“ - ”。但是,我今天注意到了一个奇怪的事情。我们将请求从apache(80)重定向到jboss。 Apache访问日志将上述请求显示为完全编码:
GET /r/%3Fclient_id%3D3%26redirect_url%3Dhttp%253A%252F%252Fwww.amazon.de%252Fgp%252Fsearch%253Fie%253DUTF8%2526keywords%253DCyberlink%2BPower%2BDirector%2526search-alias%253Dsoftware HTTP/1.0" 400 965 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.10)"
虽然jboss访问日志除了%3F解码之外都有。现在这让我觉得apache在解码的某个地方搞砸了?
答案 2 :(得分:0)
我在使用 JBoss 13 解码 URL 时也遇到问题。
我在 JBoss 配置中添加了最后一行,现在可以使用了。
/subsystem=undertow/servlet-container=default:write-attribute(name=default-encoding,value="ISO-8859-15")
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=url-charset,value="ISO-8859-15")
如果需要更多文档,请在此处提供:https://wildscribe.github.io/WildFly/13.0/subsystem/undertow/server/http-listener/index.html