@@ -39,10 +39,9 @@ class InvalidRequestFilterTest {
3939 assertThat " filter.blockBackslash expected to be true" , filter. isBlockBackslash()
4040 assertThat " filter.blockNonAscii expected to be true" , filter. isBlockNonAscii()
4141 assertThat " filter.blockSemicolon expected to be true" , filter. isBlockSemicolon()
42- assertThat " filter.blockTraversal expected to be true" , filter. isBlockTraversal()
42+ assertThat " filter.blockTraversal expected to be NORMAL" ,
43+ filter. getPathTraversalBlockMode() == InvalidRequestFilter.PathTraversalBlockMode . NORMAL
4344 assertThat " filter.blockRewriteTraversal expected to be true" , filter. isBlockRewriteTraversal()
44- assertThat " filter.blockEncodedPeriod expected to be true" , filter. isBlockEncodedPeriod()
45- assertThat " filter.blockEncodedForwardSlash expected to be true" , filter. isBlockEncodedForwardSlash()
4645 }
4746
4847 @Test
@@ -76,11 +75,10 @@ class InvalidRequestFilterTest {
7675
7776 assertPathBlocked(filter, " /something" , " /;something" )
7877 assertPathBlocked(filter, " /something" , " /something" , " /;" )
79- assertPathBlocked(filter, " /something" , " /something" , " /.;" )
8078 }
8179
8280 @Test
83- void testBlocksTraversal () {
81+ void testBlocksTraversalNormal () {
8482 InvalidRequestFilter filter = new InvalidRequestFilter ()
8583 assertPathBlocked(filter, " /something/../" )
8684 assertPathBlocked(filter, " /something/../bar" )
@@ -89,77 +87,52 @@ class InvalidRequestFilterTest {
8987 assertPathBlocked(filter, " /.." )
9088 assertPathBlocked(filter, " .." )
9189 assertPathBlocked(filter, " ../" )
92- assertPathBlocked(filter, " %2F./" )
9390 assertPathBlocked(filter, " /something/./" )
9491 assertPathBlocked(filter, " /something/./bar" )
9592 assertPathBlocked(filter, " /something/\u 002e/bar" )
9693 assertPathBlocked(filter, " /something/./bar/" )
9794 assertPathBlocked(filter, " /something/." )
9895 assertPathBlocked(filter, " /." )
9996 assertPathBlocked(filter, " /something/../something/." )
100- assertPathBlocked(filter, " /something/../something/." )
101- assertPathBlocked(filter, " /something/.;" )
102- assertPathBlocked(filter, " /something/%2e%3b" )
103-
104- assertPathAllowed(filter, " /something/.bar" )
105- assertPathAllowed(filter, " /.something" )
106- assertPathAllowed(filter, " .something" )
107- }
108-
109- @Test
110- void testBlocksEncodedPeriod () {
111- InvalidRequestFilter filter = new InvalidRequestFilter ()
112- assertPathBlocked(filter, " /%2esomething" )
113- assertPathBlocked(filter, " %2esomething" )
114- assertPathBlocked(filter, " %2E./" )
115- assertPathBlocked(filter, " %2F./" )
116- assertPathBlocked(filter, " /something/%2e;" )
117- assertPathBlocked(filter, " /something/%2e%3b" )
118- assertPathBlocked(filter, " /something/%2e%2E/bar/" )
119- assertPathBlocked(filter, " /something/%2e/bar/" )
120- }
12197
122- @Test
123- void testAllowsEncodedPeriod () {
124- InvalidRequestFilter filter = new InvalidRequestFilter ()
125- filter. setBlockEncodedPeriod(false )
126- assertPathAllowed(filter, " /%2esomething" )
127- assertPathAllowed(filter, " %2esomething" )
12898 assertPathAllowed(filter, " %2E./" )
129- assertPathAllowed(filter, " /something/%2e%2E/bar/" )
130- assertPathAllowed(filter, " /something/%2e/bar/" )
131- }
132-
133- @Test
134- void testBlocksEncodedForwardSlash () {
135- InvalidRequestFilter filter = new InvalidRequestFilter ()
136- assertPathBlocked(filter, " %2F./" )
137- assertPathBlocked(filter, " /something/%2f/bar/" )
138- }
139-
140- @Test
141- void testAllowsEncodedForwardSlash () {
142- InvalidRequestFilter filter = new InvalidRequestFilter ()
143- filter. setBlockEncodedForwardSlash(false )
14499 assertPathAllowed(filter, " %2F./" )
100+ assertPathAllowed(filter, " /something/%2e/bar/" )
145101 assertPathAllowed(filter, " /something/%2f/bar/" )
102+ assertPathAllowed(filter, " /something/http:%2f%2fmydomain.example.com%2foidc/bar/" )
103+ assertPathAllowed(filter, " /something/%2e%2E/bar/" )
104+ assertPathAllowed(filter, " /something/http:%2f%2fmydomain%2eexample%2ecom%2foidc/bar/" )
146105 }
147106
148107 @Test
149- void testBlocksRewriteTraversal () {
108+ void testBlocksTraversalStrict () {
150109 InvalidRequestFilter filter = new InvalidRequestFilter ()
151- filter. setBlockSemicolon(false )
152- assertPathBlocked(filter, " /something/..;jsessionid=foobar" )
153- assertPathBlocked(filter, " /something/.;jsessionid=foobar" )
154- }
110+ filter. setBlockPathTraversal(InvalidRequestFilter.PathTraversalBlockMode . STRICT )
111+ assertThat " filter.blockEncodedPeriod expected to be true" , filter. isBlockEncodedPeriod()
112+ assertThat " filter.blockEncodedForwardSlash expected to be true" , filter. isBlockEncodedForwardSlash()
155113
156- @Test
157- void testAllowRewriteTraversal () {
158- InvalidRequestFilter filter = new InvalidRequestFilter ()
159- filter. setBlockSemicolon(false )
160- filter. setBlockRewriteTraversal(false )
161- assertPathAllowed(filter, " /something/..;jsessionid=foobar" )
162- assertPathAllowed(filter, " /something/.;jsessionid=foobar" )
114+ assertPathBlocked(filter, " /something/../" )
115+ assertPathBlocked(filter, " /something/../bar" )
116+ assertPathBlocked(filter, " /something/../bar/" )
117+ assertPathBlocked(filter, " /something/.." )
118+ assertPathBlocked(filter, " /.." )
119+ assertPathBlocked(filter, " .." )
120+ assertPathBlocked(filter, " ../" )
121+ assertPathBlocked(filter, " /something/./" )
122+ assertPathBlocked(filter, " /something/./bar" )
123+ assertPathBlocked(filter, " /something/\u 002e/bar" )
124+ assertPathBlocked(filter, " /something/./bar/" )
125+ assertPathBlocked(filter, " /something/." )
126+ assertPathBlocked(filter, " /." )
127+ assertPathBlocked(filter, " /something/../something/." )
128+
129+ assertPathBlocked(filter, " %2E./" )
130+ assertPathBlocked(filter, " %2F./" )
131+ assertPathBlocked(filter, " /something/%2e/bar/" )
132+ assertPathBlocked(filter, " /something/%2f/bar/" )
133+ assertPathBlocked(filter, " /something/http:%2f%2fmydomain.example.com%2foidc/bar/" )
134+ assertPathBlocked(filter, " /something/%2e%2E/bar/" )
135+ assertPathBlocked(filter, " /something/http:%2f%2fmydomain%2eexample%2ecom%2foidc/bar/" )
163136 }
164137
165138 @Test
@@ -213,7 +186,7 @@ class InvalidRequestFilterTest {
213186 @Test
214187 void testAllowTraversal () {
215188 InvalidRequestFilter filter = new InvalidRequestFilter ()
216- filter. setBlockTraversal( false )
189+ filter. setBlockPathTraversal( InvalidRequestFilter.PathTraversalBlockMode . NO_BLOCK );
217190
218191 assertPathAllowed(filter, " /something/../" )
219192 assertPathAllowed(filter, " /something/../bar" )
@@ -230,6 +203,14 @@ class InvalidRequestFilterTest {
230203 assertPathAllowed(filter, " /something/." )
231204 assertPathAllowed(filter, " /." )
232205 assertPathAllowed(filter, " /something/../something/." )
206+
207+ assertPathAllowed(filter, " %2E./" )
208+ assertPathAllowed(filter, " %2F./" )
209+ assertPathAllowed(filter, " /something/%2e/bar/" )
210+ assertPathAllowed(filter, " /something/%2f/bar/" )
211+ assertPathAllowed(filter, " /something/http:%2f%2fmydomain.example.com%2foidc/bar/" )
212+ assertPathAllowed(filter, " /something/%2e%2E/bar/" )
213+ assertPathAllowed(filter, " /something/http:%2f%2fmydomain%2eexample%2ecom%2foidc/bar/" )
233214 }
234215
235216 static void assertPathBlocked (InvalidRequestFilter filter , String requestUri , String servletPath = requestUri, String pathInfo = null ) {
0 commit comments