[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [servlet-dev] Path Parameters
|
- From: Mark Thomas <markt@xxxxxxxxxx>
- Date: Wed, 17 Feb 2021 12:47:04 +0000
- Autocrypt: addr=markt@xxxxxxxxxx; prefer-encrypt=mutual; keydata= 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
- Delivered-to: servlet-dev@xxxxxxxxxxx
- List-archive: <https://www.eclipse.org/mailman/private/servlet-dev/>
- List-help: <mailto:servlet-dev-request@eclipse.org?subject=help>
- List-subscribe: <https://www.eclipse.org/mailman/listinfo/servlet-dev>, <mailto:servlet-dev-request@eclipse.org?subject=subscribe>
- List-unsubscribe: <https://www.eclipse.org/mailman/options/servlet-dev>, <mailto:servlet-dev-request@eclipse.org?subject=unsubscribe>
- User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0
On 17/02/2021 12:16, Greg Wilkins wrote:
> On Wed, 17 Feb 2021 at 12:28, Mark Thomas <markt@xxxxxxxxxx
> <mailto:markt@xxxxxxxxxx>> wrote:
>
> On 12/02/2021 17:11, Greg Wilkins wrote:
> > So this gives us two problems. Firstly I now cannot find any current
> > specification of HTTP URL path parameters and how they should be
> > parsed. So I think the servlet spec could be relying on the
> > grandfathered definition from RFC2396. IS this true? Does
> anybody know
> > of a current specification for them?
>
> I'm not aware of anything better than the references you have provided.
>
>
> Then I think we need to probably note in future specs we are using an
> obsoleted RFC to define what they are. I'll ask contacts in IETF if
> there is any process to get path parameters formalized there.
Ack
> > In Jetty, we already handle ambiguous URIs like/foo/%2e%2e/bar with a
> > 400 and intend to do the same with /foo/..;/bar and /foo/%2f/bar. How
> > do the other container handle such URIs?
>
> In Tomcat we process URIs with the following sequence:
> - separate the query string (if any)
> - parse the path parameters (we are only interested in jsessionid or
> equivalent) and remove them from the URI
> - %nn decode the URI
> - normalize the URI
> - map the URI to virtual host, web app, filters, security constraints,
> servlet etc.
>
>
> That is also how Jetty has done it until recently. Specifically decode
> and then normalize.
>
> However, that is not compliant with RFC 3986 which says that
> normalization should happen before decoding.
Where does it say that? I just looked through all the references to
normalization and couldn't find it.
> That is all fine if you
> remember the segment boundaries so that segments like "%2e%2e", "%2f"
> and "..;" would be seen as decoded segments after normalization of "..",
> "/" and "..".
My reading of section 2.2 is that reserved characters should not be %nn
decoded prior to normalization.
> But we don't remember segment boundaries and put them
> all back into a string, so following the RFC of normalize and then
> decode means that information is thrown away and those segments are now
> ambiguous.
>
> Our plan is to now to follow the RFC and then 400 any requests that have
> such segments, but have a compliance mode for apps that want to work on
> the raw URI.
>
> I don't think that is a huge difference to what Tomcat is doing, other
> than for a URI like "/foo/%2e%2e/bar". Jetty will 400 such requests
> unless it is the compliance mode, in which case the path of
> "/foo/../bar" will be passed the application (which will have to have
> it's big boy pants on and look at the raw URI). I think Tomcat will
> handle that as "/bar"?
For that specific example, yes.
> Jetty used to do that, but we had problems with
> intermediaries putting constraints on "/foo/*"
Arguably an issue with the intermediary for that specific example but
there are other examples such as "/..;/" where there would be an issue
that wasn't the intermediary's fault.
>
> Given all of the above when receiving a request of the form
> "/foo;v=1/bar" there were several ways to handle it:
>
>
> No disagreement on the handling of that one. Spec is clear that we strip
> path params and treat it as "/foo/bar". It is only when the docoded
> segment is ".", ".." or includes "/" that I think there is a problem.
>
>
> The downside with approach 3 is that when used behind a reverse proxy,
> and depending on how the reverse proxy does the request mapping, it may
> be possible to bypass path based security constraints defined in the
> reverse proxy. If the reverse proxy is using path matching as a security
> control, URIs containing "/..;/" may bypass that control. The Tomcat
> provided proxy modules (mod_jk, ISAPI redirector) map requests using the
> same algorithm as Tomcat to avoid this potential issue.
>
>
> Using the same algorithm is key to avoiding security problems. Given
> that the RFCs are very poor in this area then perhaps the servlet spec
> needs to specify the algorithm we expect to be applied?
I think the Servlet spec is the place to be more explicit about this.
This has been on my radar for a while:
https://github.com/eclipse-ee4j/servlet-api/issues/18
It would be great to get this into servlet.next.
Mark