From 4cf9ca70c26512d62815cf979a81d1c55c45b74f Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Tue, 29 Jun 2021 00:07:56 +0200 Subject: [PATCH] Issue #6473 - Improve alias checking in PathResource. * Reverted %-escape handling for URI query parts. * Performing canonicalization in ServletContext.getResource(), and improving alias checking in ContextHandler.getResource(). * Performing canonicalization checks in Resource.addPath() to avoid navigation above of the root. * Test added and fixed. * Various cleanups. * Improved javadoc and comments Signed-off-by: Simone Bordet --- .../java/org/eclipse/jetty/http/HttpURI.java | 62 ++++++++----------- .../org/eclipse/jetty/http/HttpURITest.java | 21 +++++++ .../maven/plugin/MavenWebAppContext.java | 1 + .../jetty/rewrite/handler/RedirectUtil.java | 4 +- .../rewrite/handler/ValidUrlRuleTest.java | 14 ++++- .../jetty/server/handler/ContextHandler.java | 12 ++-- .../jetty/server/handler/ResourceHandler.java | 2 - .../jetty/server/HttpConnectionTest.java | 6 ++ .../ContextHandlerGetResourceTest.java | 21 ++++--- .../eclipse/jetty/servlet/RequestURITest.java | 45 +++++++++++++- .../java/org/eclipse/jetty/util/URIUtil.java | 1 - .../jetty/util/resource/PathResource.java | 25 ++++---- .../eclipse/jetty/util/resource/Resource.java | 8 ++- .../jetty/util/resource/URLResource.java | 7 ++- .../jetty/util/URIUtilCanonicalPathTest.java | 20 ++++++ .../jetty/util/resource/ResourceTest.java | 18 ++++++ 16 files changed, 197 insertions(+), 70 deletions(-) diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpURI.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpURI.java index 596f1acc1424..e9db3f2fc5d7 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpURI.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpURI.java @@ -34,7 +34,7 @@ * via the static methods such as {@link #build()} and {@link #from(String)}. * * A URI such as - * http://user@host:port/path;param1/%2e/info;param2?query#fragment + * {@code http://user@host:port/path;param1/%2e/info;param2?query#fragment} * this class will split it into the following optional elements: