Skip to content

Use REQUEST_URI instead of PATH_INFO - #18050

Merged
markstory merged 2 commits into
5.xfrom
use-request-uri
Dec 6, 2024
Merged

markstory merged 2 commits into
5.xfrom
use-request-uri

Conversation

@markstory

Copy link
Copy Markdown
Member

Switch to using REQUEST_URI (via diactoros/Uri) instead of reading from PATH_INFO. The PATH_INFO value includes URL decoding which can allow encoded URLs to match routes when they shouldn't.

I'll back port this to 4.x once we're happy with it.

Switch to using REQUEST_URI (via diactoros/Uri) instead of reading from
PATH_INFO. The PATH_INFO value includes URL decoding which can allow
encoded URLs to match routes when they shouldn't.
@markstory markstory added this to the 5.1.3 milestone Nov 30, 2024
This was contributing to %2f getting through routing. We have to retain
backwards compatibility with urlencoded path segements as users expect
those to be exposed to application code in a decoded state.
@markstory

Copy link
Copy Markdown
Member Author

I did some local testing with apache and various webroot directories and there weren't any regressions in URL handling.

@ADmad

ADmad commented Dec 3, 2024

Copy link
Copy Markdown
Member

I did some local testing with apache and various webroot directories and there weren't any regressions in URL handling.

Did you check with the app in a sub directory of document root?

@markstory

Copy link
Copy Markdown
Member Author

Did you check with the app in a sub directory of document root?

Tested that scenario tonight and it looks good. I did all of my testing with apache.

@markstory
markstory merged commit 1372bba into 5.x Dec 6, 2024
@markstory
markstory deleted the use-request-uri branch December 6, 2024 14:53
markstory added a commit that referenced this pull request Dec 6, 2024
Switch to using REQUEST_URI (via diactoros/Uri) instead of reading from
PATH_INFO. The PATH_INFO value includes URL decoding which can allow
encoded URLs to match routes when they shouldn't.

Remove urldecode in RouteCollection

This was contributing to %2f getting through routing. We have to retain
backwards compatibility with urlencoded path segements as users expect
those to be exposed to application code in a decoded state.

Backport of #18050 to 4.x
markstory added a commit that referenced this pull request Dec 10, 2024
Use REQUEST_URI instead of PATH_INFO (#18050)
markstory added a commit that referenced this pull request Jul 12, 2026
Currently path prefix matching does not treat %2f as /, and `Route` has
an option for it. In the past we've made changes in this area
(#18050, #16110) to make urldecoding optional, and to intentionally
decode urlencoding in path segments to support non-ascii applications.

We got a report on the security list for a potential issue where *if*
an application enforced authorization within path prefixed scopes, and
had fallback routes enabled, then one could potentially bypass the scoped
middleware and hit the fallback routes which inconsistently handle %2f.

These changes align the behavior of urldecoding between RouteCollection
and Route with a new shared internal function. I thought a function was
better than exposing a static method on a public class.

Thanks to Rotem Reiss for reporting this issue.
markstory added a commit that referenced this pull request Jul 12, 2026
Currently path prefix matching does not treat %2f as /, and `Route` has
an option for it. In the past we've made changes in this area
(#18050, #16110) to make urldecoding optional, and to intentionally
decode urlencoding in path segments to support non-ascii applications.

We got a report on the security list for a potential issue where *if*
an application enforced authorization within path prefixed scopes, and
had fallback routes enabled, then one could potentially bypass the scoped
middleware and hit the fallback routes which inconsistently handle %2f.

These changes align the behavior of urldecoding between RouteCollection
and Route with a new shared internal function. I thought a function was
better than exposing a static method on a public class.

Thanks to Rotem Reiss for reporting this issue.
markstory added a commit that referenced this pull request Jul 14, 2026
Currently path prefix matching does not treat %2f as /, and `Route` has
an option for it. In the past we've made changes in this area
(#18050, #16110) to make urldecoding optional, and to intentionally
decode urlencoding in path segments to support non-ascii applications.

We got a report on the security list for a potential issue where *if*
an application enforced authorization within path prefixed scopes, and
had fallback routes enabled, then one could potentially bypass the scoped
middleware and hit the fallback routes which inconsistently handle %2f.

These changes align the behavior of urldecoding between RouteCollection
and Route with a new shared internal function. I thought a function was
better than exposing a static method on a public class.

Thanks to Rotem Reiss for reporting this issue.
markstory added a commit that referenced this pull request Jul 14, 2026
Handle %2f in routing more consistently

Currently path prefix matching does not treat %2f as /, and `Route` has
an option for it. In the past we've made changes in this area
(#18050, #16110) to make urldecoding optional, and to intentionally
decode urlencoding in path segments to support non-ascii applications.

We got a report on the security list for a potential issue where *if*
an application enforced authorization within path prefixed scopes, and
had fallback routes enabled, then one could potentially bypass the scoped
middleware and hit the fallback routes which inconsistently handle %2f.

These changes align the behavior of urldecoding between RouteCollection
and Route with a new shared internal function. I thought a function was
better than exposing a static method on a public class.

Thanks to Rotem Reiss for reporting this issue.
markstory added a commit that referenced this pull request Jul 14, 2026
Currently path prefix matching does not treat %2f as /, and `Route` has
an option for it. In the past we've made changes in this area
(#18050, #16110) to make urldecoding optional, and to intentionally
decode urlencoding in path segments to support non-ascii applications.

We got a report on the security list for a potential issue where *if*
an application enforced authorization within path prefixed scopes, and
had fallback routes enabled, then one could potentially bypass the scoped
middleware and hit the fallback routes which inconsistently handle %2f.

These changes align the behavior of urldecoding between RouteCollection
and Route with a new shared internal function. I thought a function was
better than exposing a static method on a public class.

Thanks to Rotem Reiss for reporting this issue.
markstory added a commit that referenced this pull request Jul 14, 2026
Currently path prefix matching does not treat %2f as /, and `Route` has
an option for it. In the past we've made changes in this area
(#18050, #16110) to make urldecoding optional, and to intentionally
decode urlencoding in path segments to support non-ascii applications.

We got a report on the security list for a potential issue where *if*
an application enforced authorization within path prefixed scopes, and
had fallback routes enabled, then one could potentially bypass the scoped
middleware and hit the fallback routes which inconsistently handle %2f.

These changes align the behavior of urldecoding between RouteCollection
and Route with a new shared internal function. I thought a function was
better than exposing a static method on a public class.

Thanks to Rotem Reiss for reporting this issue.
markstory added a commit that referenced this pull request Jul 15, 2026
Handle %2f in routing more consistently

Currently path prefix matching does not treat %2f as /, and `Route` has
an option for it. In the past we've made changes in this area
(#18050, #16110) to make urldecoding optional, and to intentionally
decode urlencoding in path segments to support non-ascii applications.

We got a report on the security list for a potential issue where *if*
an application enforced authorization within path prefixed scopes, and
had fallback routes enabled, then one could potentially bypass the scoped
middleware and hit the fallback routes which inconsistently handle %2f.

These changes align the behavior of urldecoding between RouteCollection
and Route with a new shared internal function. I thought a function was
better than exposing a static method on a public class.

Thanks to Rotem Reiss for reporting this issue.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants