LoginSignup
3
3

More than 5 years have passed since last update.

Tomcat7 とRFC違反のCookie

Posted at

業務の都合で、Tomcat7でRFC違反のCookieを発行しなければならなくなった。
具体的には、値に"="を含むCookieをダブルクォートで囲まずに発行せよ、とのことである。

Tomcat7では通常RFCに従い、"="のような特殊なセパレータ文字を含むCookie値が許可されることはなく、ダブルクォーテーションによって囲まれる。
これを嫌い、ダブルクォートで囲まれないようにするための実装について記す。

Tomcat 7 では(Tomcat HOME)/conf/catalina.propertiesに記載された設定値によって、発行するCookieに以下のように制約が生じる。

なお、デフォルトでは両設定値ともfalseとなる。

パターン①
org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false
又は
org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=true

  →',', ';', ' ', '\t'が含まれている場合ダブルクォートで囲う

パターン②
org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=false
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false

  → '\t', ' ', '\"', '(', ')', ',',':', ';', '<', '=', '>', '?', '@', '[', '\', ']', '{', '}'が含まれている場合ダブルクォートで囲う

パターン③
org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=false
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=true

  →パターン②に加え、'/'が含まれている場合にはダブルクォートで囲う。

従って、Tomcat 7系では"="に限らず、主要なセパレータを含む値をCookieにセットしたい場合、org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0をtrueにセットすることで目的を達成することが出来る。

なお、TomcatでこれらRFC違反のCookieを受け付けられるか、という点は未検証である。
従って別途注意が必要である。
 ※恐らく上記設定値に従うと思われるが。。。

私が参考にしたのはTomcat Ver 7.0.47のソースコードであるが、恐らく7系ではこの制約は同じものと思われる。
細かいマイナーバージョンでの動作を確認したい場合は、各自ソースコードを参照されたし。

なお、Tomcat v6やv8のソースコードは読んでいないため、仕様が本記事と異なる可能性がある。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3