2005年07月09日

クッキー

開発。

クッキーって、サーバがSet-Cookie:を送って、クライアントがCookie:を
返すだけ。簡単な仕組み。という意識でいたが、

不具合があるとセキュリティホールになるからRFCを調べるか。
と思ってRFC2109を読んでみると、
やはり、セキュリティの注意事項が丁寧に書いてあった。
4.3.2章に「こんなクッキーは拒否(受け取らない)ようにしましょう」とある。
* The value for the Path attribute is not a prefix of the request-
URI.
* The value for the Domain attribute contains no embedded dots or
does not start with a dot.
* The value for the request-host does not domain-match the Domain
attribute.
* The request-host is a FQDN (not IP address) and has the form HD,
where D is the value of the Domain attribute, and H is a string
that contains one or more dots.
Examples:
* A Set-Cookie from request-host y.x.foo.com for Domain=.foo.com
would be rejected, because H is y.x and contains a dot.
* A Set-Cookie from request-host x.foo.com for Domain=.foo.com would
be accepted.
* A Set-Cookie with Domain=.com or Domain=.com., will always be
rejected, because there is no embedded dot.
* A Set-Cookie with Domain=ajax.com will be rejected because the
value for Domain does not begin with a dot.

訳すと、こんな感じか。
次の条件のクッキーは危険なので保存すべきではない。
 1)Path属性の値がリクエストURIのプレフィックスになっていないとき
 2)Domain属性の値が埋め込みドットがない、または、ドットで始まっていないとき
 3)リクエストホストの値がドメイン属性とマッチしないとき
 4)リクエストホストがIPアドレスでないFQDN(フルドメイン名)で、かつ、
  Domain属性の値より前のホスト名に1つ以上のドットを含むホスト名のとき
 例)
 ・y.x.foo.comがリクエストホストでDomain属性が.foo.comのSet-Cookieは、
  拒否すべき。なぜならホスト名y.xに1つ以上のドットを含むため。
 ・x.foo.comがリクエストホストでDomain属性が.foo.comのSet-Cookieは、
  は受理すべき。
 ・Domain属性が.comや.com.のSet-Cookieは常に拒否すべき。なぜなら
  埋め込みドットがないため。
 ・Domain属性がajax.comのSet-Cookieは拒否すべき。なぜならドメイン名
  がドットで始まっていないため。

うーむ、結構条件細かい。。ミスのないように実装しないとね。
他のブラウザさんもちゃんと判定しているのだろうか。

RFCを読んだあと、RFCの前の仕様であるNetscapeの仕様(原文はこちら)を読んだ。
Netscape社の仕様はかなり簡単で適当だった。これは設計が間違っている。。

そして、ieHTTPHeadersで、いろんなサイトのSet-Cookieを調べると
RFC準拠のクッキーは皆無。みんなNetscape仕様のクッキーを使っている。
RFCの方がより正確で拡張性があり、安全性があるが、全く流通していない。。
RFCの意味なし。。

という訳でNetscape仕様で実装することにした。

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/ibisbrowser/27568184
この記事へのコメント
obsoletedになってる2109読んで文句言われても…
Posted by ななし at 2005年07月09日 21:42
スコの最新バージョンに致命的な欠陥発生。
現在は修正されている模様。
しかしアナウンスなし。
さらに、非常に危険な欠陥なのに、「システム上の問題」として詳細を公表せず。
欠陥とは各webメールサービスのID,PASSWORDが外部に流出した可能性。

ガンガレアイビス!
欠陥に注意汁!
Posted by なにし at 2005年07月10日 19:52
RFC2965 http://www.ietf.org/rfc/rfc2965.txt
ですね。失礼しました。これから読んでみます。
Posted by アイビス at 2005年07月11日 14:05