|
46 | 46 | * @since 1.6 |
47 | 47 | */ |
48 | 48 | public class InvalidRequestFilter extends AccessControlFilter { |
49 | | - |
50 | | - enum PathTraversalBlockMode { |
| 49 | + public enum PathTraversalBlockMode { |
51 | 50 | STRICT, |
52 | 51 | NORMAL, |
53 | 52 | NO_BLOCK; |
@@ -129,10 +128,10 @@ private static boolean containsOnlyPrintableAsciiCharacters(String uri) { |
129 | 128 | } |
130 | 129 |
|
131 | 130 | private boolean containsTraversal(String uri) { |
132 | | - if (isBlockTraversalNormal()) { |
| 131 | + if (pathTraversalBlockMode == PathTraversalBlockMode.NORMAL) { |
133 | 132 | return !(isNormalized(uri)); |
134 | 133 | } |
135 | | - if (isBlockTraversalStrict()) { |
| 134 | + if (pathTraversalBlockMode == PathTraversalBlockMode.STRICT) { |
136 | 135 | return !(isNormalized(uri) |
137 | 136 | && PERIOD.stream().noneMatch(uri::contains) |
138 | 137 | && FORWARDSLASH.stream().noneMatch(uri::contains)); |
@@ -190,21 +189,49 @@ public void setBlockNonAscii(boolean blockNonAscii) { |
190 | 189 | this.blockNonAscii = blockNonAscii; |
191 | 190 | } |
192 | 191 |
|
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; |
195 | 198 | } |
196 | 199 |
|
197 | | - public boolean isBlockTraversalStrict() { |
| 200 | + public boolean isBlockEncodedPeriod() { |
198 | 201 | return pathTraversalBlockMode == PathTraversalBlockMode.STRICT; |
199 | 202 | } |
200 | 203 |
|
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; |
203 | 230 | } |
204 | 231 |
|
205 | 232 | /** |
206 | 233 | * |
207 | | - * @deprecated Use {@link #setPathTraversalBlockMode(PathTraversalBlockMode)} |
| 234 | + * @deprecated Use {@link #setBlockPathTraversal(PathTraversalBlockMode)} |
208 | 235 | */ |
209 | 236 | @Deprecated |
210 | 237 | public void setBlockTraversal(boolean blockTraversal) { |
|
0 commit comments