shiro icon indicating copy to clipboard operation
shiro copied to clipboard

[#1025] - Shiro's InvalidRequestFilter blocks valid paths with encoded slashes

Open haster opened this issue 2 years ago • 4 comments

fixes #1025 Adds a 3-valued enum for path-traversal-blockmode. Default is NORMAL, which only blocks actual paths. STRICT also blocks encoded slashes ('/') and periods ('.'). NO_BLOCK disables.

This enables a mode to block actual path traversal while still allowing for encoded URLs and such to be present as path parameter.

Following this checklist to help us incorporate your contribution quickly and easily:

  • [x] Make sure there is a GitHub issue filed for the change (usually before you start working on it). Trivial changes like typos do not require a GitHub issue. Your pull request should address just this issue, without pulling in other changes.
  • [x] Each commit in the pull request should have a meaningful subject line and body.
  • [x] Format the pull request title like [#XXX] - Fixes bug in SessionManager, where you replace #XXX with the appropriate GitHub issue. Best practice is to use the GitHub issue title in the pull request title and in the first line of the commit message.
  • [x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
  • [x] add fixes #XXX if merging the PR should close a related issue.
  • [x] Run mvn verify to make sure basic checks pass. A more thorough check will be performed on your pull request automatically.
  • [x] If you have a group of commits related to the same change, please squash your commits into one and force push your branch using git rebase -i.
  • [x] Committers: Make sure a milestone is set on the PR

Trivial changes like typos do not require a GitHub issue (javadoc, comments...). In this case, just format the pull request title like [DOC] - Add javadoc in SessionManager.

If this is your first contribution, you have to read the Contribution Guidelines

If your pull request is about ~20 lines of code you don't need to sign an Individual Contributor License Agreement if you are unsure please ask on the developers list.

To make clear that you license your contribution under the Apache License Version 2.0, January 2004 you have to acknowledge this by using the following check-box.

haster avatar Aug 02 '23 14:08 haster

Thanks for the PR @haster! (and sorry for the delay with the response)

I can see the desire to make this more flexible, but we need to make sure we retain backwards compatibility with the current versions of Shiro. e.g. restore the boolean getter's, (though we could deprecate it too)

I think the default value should be what you have defined as STRICT (secure by default)

Possibly enum values of ENABLED, LAX, and DISABLED? Where LAX, (or something better named), is your current NORMAL?

  /**
     * 
     * @deprecated Use {@link #getBlockTraversal()}
     */
    @Deprecated
public boolean isBlockTraversal() {
  // we could even add a log warning here 🤷
  return this.pathTraversalBlockMode != DISABLED;
}

Thoughts / suggestions? (other ideas for the term LAX)?

bdemers avatar Sep 01 '23 14:09 bdemers

Are there any updates on this issue?

ansidev avatar Sep 21 '23 18:09 ansidev

@haster what do you think about @bdemers suggestions?

lprimak avatar Nov 05 '23 19:11 lprimak

There are still issues with this PR that remain unresolved, and it seems the author has abandoned it. We are happy to accept improvements to this PR or another PR to resolve the outstanding issues

lprimak avatar Jun 20 '24 03:06 lprimak