Skip to content

Commit 26f6a0f

Browse files
committed
restored backward compatibility
1 parent 1845332 commit 26f6a0f

File tree

2 files changed

+41
-13
lines changed

2 files changed

+41
-13
lines changed

web/src/main/java/org/apache/shiro/web/filter/InvalidRequestFilter.java

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@
4646
* @since 1.6
4747
*/
4848
public class InvalidRequestFilter extends AccessControlFilter {
49-
50-
enum PathTraversalBlockMode {
49+
public enum PathTraversalBlockMode {
5150
STRICT,
5251
NORMAL,
5352
NO_BLOCK;
@@ -129,10 +128,10 @@ private static boolean containsOnlyPrintableAsciiCharacters(String uri) {
129128
}
130129

131130
private boolean containsTraversal(String uri) {
132-
if (isBlockTraversalNormal()) {
131+
if (pathTraversalBlockMode == PathTraversalBlockMode.NORMAL) {
133132
return !(isNormalized(uri));
134133
}
135-
if (isBlockTraversalStrict()) {
134+
if (pathTraversalBlockMode == PathTraversalBlockMode.STRICT) {
136135
return !(isNormalized(uri)
137136
&& PERIOD.stream().noneMatch(uri::contains)
138137
&& FORWARDSLASH.stream().noneMatch(uri::contains));
@@ -190,21 +189,49 @@ public void setBlockNonAscii(boolean blockNonAscii) {
190189
this.blockNonAscii = blockNonAscii;
191190
}
192191

193-
public boolean isBlockTraversalNormal() {
194-
return pathTraversalBlockMode == PathTraversalBlockMode.NORMAL;
192+
public PathTraversalBlockMode getPathTraversalBlockMode() {
193+
return pathTraversalBlockMode;
194+
}
195+
196+
public void setBlockPathTraversal(PathTraversalBlockMode mode) {
197+
this.pathTraversalBlockMode = mode;
195198
}
196199

197-
public boolean isBlockTraversalStrict() {
200+
public boolean isBlockEncodedPeriod() {
198201
return pathTraversalBlockMode == PathTraversalBlockMode.STRICT;
199202
}
200203

201-
public void setPathTraversalBlockMode(PathTraversalBlockMode mode) {
202-
this.pathTraversalBlockMode = mode;
204+
public void setBlockEncodedPeriod(boolean blockEncodedPeriod) {
205+
setBlockPathTraversal(blockEncodedPeriod ? PathTraversalBlockMode.STRICT : PathTraversalBlockMode.NORMAL);
206+
}
207+
208+
public boolean isBlockEncodedForwardSlash() {
209+
return pathTraversalBlockMode == PathTraversalBlockMode.STRICT;
210+
}
211+
212+
public void setBlockEncodedForwardSlash(boolean blockEncodedForwardSlash) {
213+
setBlockPathTraversal(blockEncodedForwardSlash ? PathTraversalBlockMode.STRICT : PathTraversalBlockMode.NORMAL);
214+
}
215+
216+
public boolean isBlockRewriteTraversal() {
217+
return pathTraversalBlockMode == PathTraversalBlockMode.NORMAL;
218+
}
219+
220+
public void setBlockRewriteTraversal(boolean blockRewriteTraversal) {
221+
setBlockPathTraversal(blockRewriteTraversal ? PathTraversalBlockMode.NORMAL : PathTraversalBlockMode.NO_BLOCK);
222+
}
223+
224+
/**
225+
* @deprecated use {@link #getPathTraversalBlockMode()} instead
226+
*/
227+
@Deprecated
228+
public boolean isBlockTraversal() {
229+
return pathTraversalBlockMode != PathTraversalBlockMode.NO_BLOCK;
203230
}
204231

205232
/**
206233
*
207-
* @deprecated Use {@link #setPathTraversalBlockMode(PathTraversalBlockMode)}
234+
* @deprecated Use {@link #setBlockPathTraversal(PathTraversalBlockMode)}
208235
*/
209236
@Deprecated
210237
public void setBlockTraversal(boolean blockTraversal) {

web/src/test/groovy/org/apache/shiro/web/filter/InvalidRequestFilterTest.groovy

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ 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 NORMAL", filter.isBlockTraversalNormal()
42+
assertThat "filter.blockTraversal expected to be NORMAL",
43+
filter.getPathTraversalBlockMode() == InvalidRequestFilter.PathTraversalBlockMode.NORMAL
4344
}
4445

4546
@Test
@@ -106,7 +107,7 @@ class InvalidRequestFilterTest {
106107
@Test
107108
void testBlocksTraversalStrict() {
108109
InvalidRequestFilter filter = new InvalidRequestFilter()
109-
filter.setPathTraversalBlockMode(InvalidRequestFilter.PathTraversalBlockMode.STRICT)
110+
filter.setBlockPathTraversal(InvalidRequestFilter.PathTraversalBlockMode.STRICT)
110111
assertPathBlocked(filter, "/something/../")
111112
assertPathBlocked(filter, "/something/../bar")
112113
assertPathBlocked(filter, "/something/../bar/")
@@ -182,7 +183,7 @@ class InvalidRequestFilterTest {
182183
@Test
183184
void testAllowTraversal() {
184185
InvalidRequestFilter filter = new InvalidRequestFilter()
185-
filter.setPathTraversalBlockMode(InvalidRequestFilter.PathTraversalBlockMode.NO_BLOCK);
186+
filter.setBlockPathTraversal(InvalidRequestFilter.PathTraversalBlockMode.NO_BLOCK);
186187

187188
assertPathAllowed(filter, "/something/../")
188189
assertPathAllowed(filter, "/something/../bar")

0 commit comments

Comments
 (0)