Cookieファイルについて



Cookieとは?
 NetscapeやExplorerなどでは基本的にローカルファイル(使用しているマシンのディスク等)に情報を書き込むことは出来ません。(*1)
 しかし、JavaScriptを使用することで「cookieファイル」にのみ書き込みを行うことが出来ます。cookieファイルは以下の名称になっています。

機 種 ファイル名
UNIX cookies
Windows cookies.txt
Macintosh MagicCookie


*1
別の方法としてMIMEタイプと連動させてヘルパーアプリケーションを起動させ、ヘルパーアプリケーションを利用して書き込むという方法も可能です。またExplorer 3.0xでは<A HREF="特定のファイル">フォーマット</A>のようにディスクのフォーマットやデータの書き込みなどを行うことが可能です。


Cookieファイルの内容
 cookieファイルの内容は以下のようになっています。


# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This is a generated file!  Do not edit.

home.netscape.com	FALSE	/comprod/products/navigator/version_3.0	FALSE	949276800	dogbark	1%7Cambient%3D1%7Ccommercial%3D1%7Cfunky%3D1%7Cpop%3D1%7Csoundtrack%3D1%7Ctechno%3D1
www2n.meshnet.or.jp	FALSE	/~anada/ver1/fb/	FALSE	908123503	fb01	1997/10/10%2016%3A23%3A44
www2n.meshnet.or.jp	FALSE	/~anada/ver1/fb/	FALSE	906261345	fb02	1997/09/19%2003%3A07%3A51
www2n.meshnet.or.jp	FALSE	/~anada/ver1/fb/	FALSE	906261362	fb03	1997/09/19%2003%3A08%3A07
www2n.meshnet.or.jp	FALSE	/~anada/ver1/fb/	FALSE	906261396	fb04	1997/09/19%2003%3A08%3A21
www2n.meshnet.or.jp	FALSE	/~anada/ver1/fb/	FALSE	906852924	fb05	1997/09/25%2023%3A27%3A42
www2n.meshnet.or.jp	FALSE	/~anada/ver1/fb/	FALSE	906852967	fb06	1997/09/25%2023%3A28%3A26
www.sikasenbey.or.jp	FALSE	/~nkgwk/cgi-bin	FALSE	878781283	nkgwk-minibbs	name!古籏一浩,[email protected],url!http://www.shiojiri.ne.jp/~openspc/
www.imasy.or.jp	FALSE	/~kenichi/bbs2/	FALSE	878728390	WSLastAccess	876136390
.netscape.com	TRUE	/bin	FALSE	915148800	RCRC	832416841417460012500
.netscape.com	TRUE	/	FALSE	946684799	NETSCAPE_ID	c65ffb1e,c7654534
cgi.netscape.com	FALSE	/	FALSE	946684799	NETSCAPE_VERIFY	c65ff94b,c624e3b5
www.enemy.org	FALSE	/	FALSE	946511999	RoxenUserID	0xc9d
.adobe.com	TRUE	/	FALSE	946684799	INTERSE	202.227.3.138254857198244546
.doubleclick.net	TRUE	/	FALSE	1920499140	id	79401f9
www.geocities.com	FALSE	/	FALSE	934947883	GeoId	2027979871875883683

 Cookieファイルの項目は1行単位となっており、項目は空白で区切られています。先頭にドメイン名、フラグ、アドレス、フラグ、ID、名前、データとなっています。ファイルの1行の先頭にはアクセスしたサイト名等が記録されていますが、JavaScriptで制御する場合は、これらの情報は自動的に書き込まれるため指定する必要はありません。データおよび期日を指定するだけです。
 期日を指定しない場合、ブラウザーが起動している間のみデータを保持することができます。



Cookieファイルの制限
 cookieファイルは1行単位で処理され、ファイルの最大サイズは4KB (4096文字)、エントリーの合計は300、サーバーまたはドメインで最大20となっています。この制限を越えた場合使用されていないものから削除されていきます。



Cookieファイルにデータを書き込もうとした場合の動作
 cookieファイルにデータを書き込む場合ですが、Netscape,Explorerのバージョンにより動作が若干異なります。以下にcookieファイルを書き込もうとした場合の状況等を示します。

ブラウザ 動  作  状  況
Netscape 2.0 特に問題なく書き込み可能
Netscape 3.0x cookieファイル書き込み時にダイアログを表示
Netscape 4.0x プレファレンスの設定により書き込み時にダイアログが表示される。書き込みを許可しない場合、cookieファイルにデータを書き込むことはできない。ただし、JavaScript1.2で拡張された命令を使用する事により一時的に書き込みを許可し元の状態に戻すことが可能になっている
Explorer 3.0x プレファレンスの設定により書き込み時にダイアログが表示される。書き込みを許可しない場合、cookieファイルにデータを書き込むことはできない
Explorer 4.0 プレファレンスの設定により書き込み時にダイアログが表示される。書き込みを許可しない場合、cookieファイルにデータを書き込むことはできない



Cookieファイルの読み書き方法
 cookieファイルの読み書きには

document.cookie

命令を使用します。myData = document.cookie;とすればデータが読み出せますが、cookieファイルに記録されている全てのデータが読み出されるわけではありません。書き込み時と同じURL(サイト)のデータのみ読み出されます。また、この場合1行しか読み込まれません。
 cookieファイルに書き込む形式は以下のようになります。

document.cookie = 名前+データ+期限(GMT)
document.cookie = 名前+データ;expires=期限;
(例:document.cookie = "MZ='721'")

 データはデータそのものでも構いませんが通常は「名前+データ」とします。期限はデータの存続可能な有効期限ですが、ローカルタイムではなくGMT(グリニッジ標準時)で指定します。データを消したい場合は、現在の日付より以前の日付を指定すればデータは消えます。ただし、データが削除されるのはブラウザー終了後ですので注意が必要です。
 期限を指定しない場合はブラウザ終了後まで一時的にデータは記録されています。

 データを読み出す場合は以下のようになります。

myData = document.cookie

 この場合読み出されるデータには期限は含まれません。もし「name=KF」というデータが書き込まれている場合、myDataには「name=KF」という「文字列」が入ります。文字列でなく数値を読み書きしたい場合には文字列に変更するといった作業が必要になります。文字列を検索する場合はindexOf、charAt、substring等の検索命令を利用します。



Cookieファイルとセキュリティ
 JavaScriptとCookieファイルを利用した場合、フォームに入力したデータを保存させておく事が可能です。JavaScriptでは現在のURLのデータしか送信する事ができずNetscape 3.0以降では送信してもよいかどうかのダイアログが表示されます。他のページで入力されたデータに関してはフレームとサブウィンドウを利用することで送信する事が可能です。しかし、この場合でもNetscape 3.0以降では送信してもよいかどうかのダイアログが表示されます。
 フレームまたはサブウィンドウおよびCGIとJavaScriptを組み合わせる事によりCookieファイルの内容を送信する事が可能です。具体的な方法については触れません。
 この場合盗まれるデータは訪問先のURLおよびCookieファイルに記述されている内容です。セキュリティ対策のために最新版のブラウザを使用するようにしてください。



安全なサイトか危険なサイトか調べる方法
 JavaScriptを利用したサイトが安全かどうかを調べる事も可能です。というのはデータを送信するために特定の命令(メソッド)を利用しなければならないためです。以下の命令がページ内に記述されているかどうか調べてみると良いでしょう。いずれも単体では機能しませんのでフォームが存在しCGIを利用している場合、Javaアプレットが存在する場合になります。調べる場合は一度JavaScriptを動作させないようにオプション設定を行ってからにしてください。設定をオフにした後に巡回後、できればキャッシュファイルを参照してみてください。本当はチェックプログラムを作成すれば良いのですが、時間がありませんf(-.-b

【1】サブウィンドウを利用したもの、その1
winName = window.open("URL",〜)
 これはサブウィンドウをオープンしデータを送信するページ(スクリプト)を読み込む可能性を示唆しています。この場合URLで示されているページ内容をチェックしてください。

【2】サブウィンドウを利用したもの、その2
winName = window.open("",""〜)
winName.location.href = "URL"

 最初の例と同じですが、2行目で読み込むURLを調べて下さい。Netscape 2.0でも使用できるようにしているものは、この方法になります。というのはNetscape 2.0ではwindow.open()命令のURL指定が無効になるためです。

【3】自動ボタンクリック機能を利用したもの
document.フォーム名.エレメント名.click()
 かなり危険なものです。この命令が存在する場合、一定時間毎またはページ更新時にデータを送信されてしまいます。特に他のページを読み込んでいる途中(または読み込み後など)にデータを送信しますからユーザーから見れば、データ読み込み中と全く同じ状態が続くことになります。

【4】JavaアプレットとのLive Connect機能を利用したもの
document.アプレット名.メソッド名
 これはLive Connect機能を利用したものです。フォームに入力されたデータやURLなどをアプレットを利用してバックグラウンドで送信するものです。この場合、右上のNetscapeアイコンの流れ星はアニメーションしませんので送信されているかどうかが分かりません。データを送信しているかどうかは、データが流れているかどうかを調べる別ソフトを用意した方が良いでしょう。

【5】外部JavaScriptファイルを利用したもの
<SCRIPT SRC="ファイル名.js">
</SCRIPT>

 これは外部JavaScriptを利用したものですが、基本的に【1】【2】と同様の方法で対処できます。JavaScriptの動作をオフにした場合、ファイルを読みにいきませんので外部JavaScriptファイルを直接参照する事になります。この場合直接URLを指定してファイルを表示させてください。その中に【3】【4】などの命令があるかどうか調べて下さい。

【6】Live Connect(プラグイン)を利用したもの
 これは未確認ですがShockwave for DirectorとLiveConnect機能を利用しJavaScriptでデータを取得後Shockwave for Director上で受け取ったデータを送信するという方法も実現の可能性があります。Shockwave for Flashにはデータ送信機能がありませんのでFlashに関しては問題ありません。



 JavaScriptのセキュリティについては話題にされますが、VBScriptのセキュリティに関してはどうなのでしょうか。CGI, JavaScript, Java, PlugIn, VBScriptの混在したページでは安全かどうかを調べるには労力を必要とします。CGIだから全て危険という事はありませんが、初めて訪問するサイトまたは危険と思われるサイトには注意を払った方がよいでしょう。
 Cookieファイルは編集してはいけない事になっていますが、1行単位で削除する限りは影響はないでしょう。Cookieファイルに「いや〜ご苦労さん」という気の利いた(?)メッセージでも入れておくのも一考でしょうf(^^;