Opera の cookie を管理するファイル cookies4.dat についての解析.
注意
この文書は,WindowsXPにWindows版の Opera9を インストールしたときの情報に基づいて作成してます.別のOS,別のバージョンの解析状況は追々.
この文書を基にして,Operaにカスタマイズその他の変更を加えて,不具合が発生しても責任は取れません.
突っ込み,感想,その他は,office@ashula.infoまで
説明
このページでは,OperaのCookie管理ファイル( cookies4.dat )について解説しています.
「ユーザごとの設定を使う」でインストールすると,通常,%APPDATA%\Opera\Opera\profile\
以下に作られます.
(%APPDATA%
は,通常Documents and Settings\user_name\Application Data
.エクスプローラの「ツール→フォルダオプション→表示→全てのファイルとフォルダを表示する」が設定されていないと見ることは出来ないです).正確な場所は opera:config#UserPrefs|CacheDirectory4の値を参照のこと.
ここにまとめた情報は主に,Opera File Formatsの公式の解説を基に作られています.ほかの資料は参考文献を参照してください.
構造
データ構造(レコード)についての概要は,binary filesを参照のこと.
cookies4.dat ファイルはヘッダと訪問済みリンク情報のデータレコードからなる.
ヘッダ
ヘッダは,4つの値からなり, cookies4.dat の ヘッダの4つの値はそれぞれ次のようになっている.
- file version number
0x0000 1000
- app. version number
0x0002 0000
- idtag_length
0x0001
- length_length
0x0002
なので,まとめるとファイルの先頭は以下のようになる.
0 8 16 24 +--------+--------+--------+--------+ | 0x00 | 0x00 | 0x10 | 0x00 | +--------+--------+--------+--------+ | 0x00 | 0x02 | 0x00 | 0x00 | +--------+--------+--------+--------+ | 0x00 | 0x01 | 0x00 | 0x02 | +--------+--------+--------+--------+
本体
cookies4.dat ファイルの本体はドメイン,パス,クッキー本体の3種類のレコードと,ドメインの終了フラグ,パスの終了フラグのみの2種類のレコードの計5種類のレコードからなる.
これらの5種類のレコードは,Opera File Formats によれば以下のような構造を構成する.
["com" record] ["opera" record] ["www" record] [cookies] [Path components] [Path component terminator] [other domains] [end of domain flag ("www")] [end of domain flag ("opera")] [end of domain flag ("com")]
まず,TLDのレコードがあり,ドメインのレコード,必要ならばさらに細かいサブドメインのレコードが続く.パスのレコードがない場合でも,パスの終了フラグのレコードはある.
cookies4.dat ファイルで使われる レコードのタグIDとペイロードは以下の通り.vlink4.dat等と共通の要素と,いくつかの専用の要素からなる.
タグID | ペイロードの型 | 説明 |
---|---|---|
0x01 | レコード | ドメインのレコード. |
(0x04 | MSB_VALUE) | flag | ドメインの終了フラグ |
0x02 | レコード | パスのレコード. |
(0x05 | MSB_VALUE) | flag | パスの終了フラグ |
0x0003 | レコード | クッキーのレコード. |
タグの値 | 内容の型 | 説明 |
---|---|---|
0x001E | string | ドメインの部分の名前 |
0x001F | int8 |
このドメインに対するクッキーをどうフィルタリングするかをあらわす.このレコードがない場合,上位ドメインの設定が使われる.
ドメインに対する設定は,サブドメインに対する設定で上書きしない限り全サブドメインに対して適用される. |
0x0021 | int8 | URLとは一致しないpath情報を含んだクッキーの取り扱う方法を定める.プライバシーの設定で受け入れる設定にしているとユーザに警告するようになるが,「警告する」が有効になっているときドメインによってフィルタリングされる.拒否するときは 1, 受け入れるときは 2. (Handling of cookies that have explicit paths which do not match the URL setting the cookies. If enabled in the privacy preferences the default is to warn the user, but when warning is enabled such cookies can be filtered by their domains: Value 1 indicates reject, and 2 is accept automatically.) |
0x0025 | int32 |
"Warn about third party cookies" モードになっているとき,このフィールドはその種のクッキーのフィルタリングに使われる.
ドメインに対する設定は,サブドメインに対する設定で上書きしない限り全サブドメインに対して適用される. |
0x0026 | int32 | 不詳 |
タグの値 | 内容の型 | 説明 |
---|---|---|
0x001D | string | pathパートの名前 |
タグの値 | 内容の型 | 説明 |
---|---|---|
0x0010 | string | クッキーの名前 |
0x0011 | string | クッキーの値 |
0x0012 | time_t | 有効期限 (Expiry date) |
0x0013 | time_t | 最後に使われた日時 (Last used) |
0x0014 | string | RFC 2965 で使われる Comment/Description |
0x0015 | string | RFC 2965 における Comment/Description に対する URL |
0x0016 | string | version=1 のクッキー(cf. RFC 2965)を受け取ったドメイン. |
0x0017 | string | version=1 のクッキー(cf. RFC 2965)を受け取ったpath. |
0x0018 | string | version=1 のクッキー(cf. RFC 2965)を受け取った port limitations |
(0x0019 | MSB_VALUE) | flag | HTTPSのサーバにのみ送信する. |
0x001A | int8+ | クッキーのバージョン(RFC 2965) |
(0x001B | MSB_VALUE) | flag | 送信元のサーバにのみクッキーを送信する. |
(0x001C | MSB_VALUE) | flag | 予約(削除保護の機能に) |
(0x0020 | MSB_VALUE) | flag | path が URL のprefix だったとき送信しない.たとえば path が /foo のとき /foo/bには送信しますが /foobar には送信しない. |
(0x0022 | MSB_VALUE) | flag | パスワードのログインフォームの結果のクッキー.もしくはそのクッキーにさかのぼれるURLからのクッキー. |
(0x0023 | MSB_VALUE) | flag | HTTP 認証による結果のクッキー.もしくはそのクッキーにさかのぼれるURLからのクッキー. |
(0x0024 | MSB_VALUE) | flag |
"Display Third party cookies" モードのとき,サードパーティーのサーバからのクッキーに対してこのフラグがセットされる.また,このフラグの付いたクッキーは取得するURLがそのサードパーティーのものだった場合にのみ,送信される.サーバからあるリソースの読み込み中に受け取った cookie はサードパーティーのURLには送信されない.The reverse is NOT true. NOTE: サードパーティーのサーバからもともとのサーバにリダイレクトするとき,リダイレクト先のURLはサードパーティサーバとみなされる. |
構成
YAML(google://YAML)っぽい書式を使ってまとめるとファイルの構成は次のようになる.()
header : file version number : 0x0000 1000 app version number : 0x0002 0000 tag_id length : 0x0001 length length : 0x0002 body : - domain record : tag : 0x01 length : 0xLLLL payload : domain_part_name : tag : 0x001E length : 0xLLLL payload : domain # 文字列(長さ domain_part_name record length) filtering_rule : tag : 0x001F length : 0x0004 payload : 0x0000 00RR # explicit paths cookie handling rule : tag : 0x0021 length : 0x0004 payload : 0x0000 00RR # third party cookie filtering rule : tag : 0x0025 length : 0x0004 payload : 0x0000 00RR - path record : tag : 0x02 length : 0xLLLL payload : path_part_name : tag : 0x001D length : 0xLLLL payload : path # 文字列 - cookie record : tag : 0x03 length : 0xLLLL payload : cookie_name : tag : 0x0010 length : 0xLLLL payload : name # 文字列 cookie_value : tag : 0x0011 length : 0xLLLL payload : value # 文字列 expiry_date : tag : 0x0012 length : 0x0004 payload : 0xTTTT TTTT # time_t last_used : tag : 0x0013 length : 0x0004 payload : 0xTTTT TTTT # time_t rfc_2965_comment : tag : 0x0014 length : 0xLLLL payload : value # 文字列 rfc_2965_comment_url : tag : 0x0015 length : 0xLLLL payload : value # 文字列 v1_cookie_domain : tag : 0x0016 length : 0xLLLL payload : value # 文字列 v1_cookie_path : tag : 0x0017 length : 0xLLLL payload : value # 文字列 v1_cookie_port : tag : 0x0018 length : 0xLLLL payload : value # 文字列 https_flag : tag : 0x0019 cookie_version : tag : 0x001a length : 0x0004 payload : 0xVVVV VVVV only_sender_flag : tag : 0x001b reserved_flag : tag : 0x001c prefix_non_send_flag : tag : 0x0020 login_result_cookie_flag : tag : 0x0022 http_auth_cookie_flag : tag : 0x0023 third_party_send_flag : tag : 0x0024 - path_end_flag : tag : 0x05 - cookie_end_flag : tag : 0x04
参考文献
- Off
Opera File Formats, http://www.opera.com/docs/fileformats/ , opera.com
- Off_jp
Opera のファイル形式, http://jp.opera.com/docs/fileformats/ , jp.opera.com
- unofficial
Opera File Formats(私家訳), http://ashula.info/neta/opera/inis/OperaFileFormats-jp.html , t.ashula
- O4FE
Opera4 File Explorer, http://users.westelcom.com/jsegur/O4FE.HTM , Josef W. Segur
更新履歴
- 2007/06/11 : 初版