You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2015/05/07 14:05:03 UTC
[Bug 57896] New: Option to preserve original cookie header when
unquoting cookie value
https://bz.apache.org/bugzilla/show_bug.cgi?id=57896
Bug ID: 57896
Summary: Option to preserve original cookie header when
unquoting cookie value
Product: Tomcat 6
Version: 6.0.43
Hardware: PC
Status: NEW
Severity: minor
Priority: P2
Component: Catalina
Assignee: dev@tomcat.apache.org
Reporter: knst.kolinko@gmail.com
This issue was originally fixed by introducing a new configuration option in
Tomcat 8 in r1448679 (for 8.0.0), backported to Tomcat 7 in r1675821 (for
7.0.62). It has not been fixed in Tomcat 6 yet.
I am filing this into Bugzilla to better document the problem.
The problem is that method "unescapeDoubleQuotes" modifies bytes in the buffer
that it is processing
(The method is LegacyCookieProcessor.unescapeDoubleQuotes() in current Tomcat
8, ServerCookie.unescapeDoubleQuotes() in current Tomcat 7 and 6).
As such, the value of original "cookie" HTTP header is corrupted. It can be
noted by calling request.getHeader("cookie") or by logging the header value in
AccessLogValve.
Steps to reproduce with current Tomcat 6 (6.0.43), Firefox 37.0.2:
1. Configure an AccessLogValve to log incoming "cookie" and outgoing
"set-cookie" HTTP headers.
That is, uncomment AccessLogValve in Host element of server.xml and set the
following value for pattern attribute:
pattern="%h %l %u %t "%r" %s %b [Cookie received: %{cookie}i]
[Set-Cookie sent: %{set-cookie}o]"
2. Start Tomcat and open Servlets Examples -> Cookies page in examples web
application,
http://localhost:8080/examples/servlets/servlet/CookieExample
3. Fill the form to create a cookie and submit it:
Name: foo
Value: bar "baz"
4. Re-visit the Cookies example page, so that browser sends you the cookie that
was created.
5. Look into access log file.
The logs look like the following:
127.0.0.1 - - [07/May/2015:15:25:37 +0400] "GET
/examples/servlets/servlet/CookieExample HTTP/1.1" 200 637 [Cookie received: -]
[Set-Cookie sent: -]
127.0.0.1 - - [07/May/2015:15:28:24 +0400] "POST
/examples/servlets/servlet/CookieExample HTTP/1.1" 200 809 [Cookie received: -]
[Set-Cookie sent: foo="bar \"baz\""; Version=1]
127.0.0.1 - - [07/May/2015:15:28:42 +0400] "GET
/examples/servlets/servlet/CookieExample HTTP/1.1" 200 714 [Cookie received:
foo="bar "baz"\""] [Set-Cookie sent: -]
Actual value:
[Cookie received: foo="bar "baz"\""]
Expected value:
[Cookie received: foo="bar \"baz\""]
Notes:
======
1. This happens only with unquoting of '"' character. No other character are
unquoted by unescapeDoubleQuotes() method.
2. Current specification of cookies (RFC6265) defines that cookie values cannot
contain double quote and backslash characters. A well-behaving web application
should not create cookies whose values contain such characters.
cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
; US-ASCII characters excluding CTLs,
; whitespace DQUOTE, comma, semicolon,
; and backslash
3. The fix introduced new system property,
org.apache.tomcat.util.http.ServerCookie.PRESERVE_COOKIE_HEADER
It defaults to 'false'. By default you have to opt-in for this fix by setting
that property to 'true'.
When running in "strict servlet compliance" mode, that setting defaults to
'true' and the fix is enabled.
The new Rfc6265CookieProcessor implementation of CookieProcessor that is
available as an opt-in feature in Tomcat 8 does not have this bug and is not
affected by that configuration option.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 57896] Option to preserve original cookie header when unquoting
cookie value
Posted by bu...@apache.org.
https://bz.apache.org/bugzilla/show_bug.cgi?id=57896
Konstantin Kolinko <kn...@gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|NEW |RESOLVED
--- Comment #2 from Konstantin Kolinko <kn...@gmail.com> ---
Implemented in Tomcat 6 by r1710457 and will be in 6.0.45.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[Bug 57896] Option to preserve original cookie header when unquoting
cookie value
Posted by bu...@apache.org.
https://bz.apache.org/bugzilla/show_bug.cgi?id=57896
Konstantin Kolinko <kn...@gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
OS| |All
--- Comment #1 from Konstantin Kolinko <kn...@gmail.com> ---
Documentation updated in Tomcat 9/8/7 (r1678174 / r1678178 / r1678180) and will
be in 7.0.62, 8.0.23.
Backport proposed for Tomcat 6.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org