mkcookie <概要> mkcookie : クライアントへ送出するCookie文字列を生成する <書式> Usage : mkcookie [options] <namefile> Option : -e [<YYYYMMDDhhmmss>][+<n>] : -p <webpath> : -d <domain> : -s <"Y"|"N"|"A"> : -h <"Y"|"N"> Version : Wed Jul 2 16:16:34 JST 2014 <説明> name形式のファイル<namefile>からクライアントへ送出するCookie文字列 (Set-Cookieヘッダ、RFC 6265準拠)を生成します。 <namefile>として"-"を指定するか、省略すると、標準入力から読み込みます。 <オプション> -e : このオプションが指定された場合、 各Set-Cookieヘッダにexpires属性文字列が付加されます。この属性は、 送出するCookieの有効期限をクライアントに指定するためのものです。 (expires属性の無指定時は、クライアントがブラウザを閉じるまで有効) このオプション使用時には<YYYYMMDDhhmmss>と+<n>という2つのパートから成る オプション引数を与えます。それぞれの意味は次のとおりです。 <YYYYMMDDhhmmss>: 送出するCookieに与える有効期限を基準日時であり、 例えば"20140102112233"は、2014年1月2日11時22分33秒と解釈されます。 尚、この日時はコマンドを実行したホストのタイムゾーンに基づくと 見なされます。従って日本(JST+9)であれば、上記の日時は世界協定時の 2014年1月2日2時22分33秒と解釈されます。 また、<YYYYMMDDhhmmss>は省略することができ、 その場合はこのコマンドを実行時の日時が設定されたものと見なされます。 +<n>: 前述の基準日時に対する秒数のオフセット値です。 例えば"+86400"を指定すると、expires属性文字列で生成される 実際の有効期限日時は、前述の基準日時の24時間後になります。 尚、+<n>は省略することができ、 その場合は、"+0"が指定されたものと見なされます。 また、負値は設定できません。 -p : このオプションが指定された場合、 各Set-Cookieヘッダにpath属性文字列が付加されます。この属性は、 送出するCookieを利用してよいWebパスが<webpath>の以下のディレクトリ だけであると、クライアントに指定するためのものです。 (path属性無指定時は、そのCookieを渡したCGIスクリプトのWebパスと見なされる) このオプションにはオプション引数<webpath>を必ず与えなければなりません。 -d : このオプションが指定された場合、 各Set-Cookieヘッダにdomain属性文字列が付加されます。この属性は、 送出するCookieを利用してよいドメインが<domain>という文字列を 右端から含んでいる場所だけであると、クライアントに指定するためのものです。 ただし、domain属性無指定時は、そのCookieを渡したCGIスクリプトと完全一致の ドメインでのみ有効という指示になるため、セキュリティの観点からは domain属性は無指定時が最も安全であるという結論がでています。 複数ドメインで共有する等の理由により、必要な場合のみ使うべきです。 使う場合は、オプション引数<domain>を必ず与えなければなりません。 -s : このオプションは、各Set-CookieヘッダにSecure属性の文字列を付ける条件を 変えるためのものです。Secure属性は、送出するCookieがSSL(HTTPS)の有効な ページでのみ利用可能であるとクライアントに指示するためのもので、 非SSLページへのCookie流出を防ぐ目的で用いられます。 (Secure属性無指定時は、SSL通信でクライアントに渡したCookieが、 例えば同じサイトが非SSL通信でアクセスされる場合においても使用されます) このオプションを利用する場合には、"Y"または"N"または"A"の文字列を必ず 指定しなければならず、それぞれは次の意味を持っています。 "Y" : 全てのSet-Cookieヘッダに、Secure属性を必ず持たせる。 "N" : 一切のSet-Cookieヘッダに、Secure属性を持たせないようにする。 "A" : 全てのSet-CookieヘッダにSecure属性を持たせるか、一切持たせないかを、 環境変数HTTPSが[Oo][Nn]であるか否かで自動判別させるようにする。 -h : このオプションは、各Set-CookieヘッダにHttpOnly属性文字列を付けるか否かを 指定するためのものです。この属性は、クライアント上のJavaScript等にCookieの 使用を禁止させるもので、XSS等の脅威を防ぐ目的で用いられます。 (HttpOnly属性無指定時は、JavaScriptからもCookieを自由に読み取れる) このオプションを利用する場合には、"Y"または"N"の文字列を必ず 指定しなければならず、それぞれは次の意味を持っています。 "Y" : 全てのSet-Cookieヘッダに、HttpOnly属性を必ず持たせる。 "N" : 一切のSet-Cookieヘッダに、HttpOnly属性を持たせないようにする。 <例> $ cat cookie_vars.txt sectionid ABC123 time 2014-07-04 12:34:56 # オプションもHTTPS環境変数も無い場合は、"変数名=値" だけが付加される。 # (値文字列内の[^0-9A-Za-z~_.-]文字はRFC 3986に基づきパーセントエンコードされる) $ mkcookie cookie_vars.txt Set-Cookie: sectionid=ABC123 Set-Cookie: time=2014-07-04+12%3A34%3A56 # HTTPS上で動くCGIスクリプト(環境変数HTTPS=ON状態)では次のようになる。 $ export HTTPS=ON $ mkcookie cookie_vars.txt Set-Cookie: sectionid=ABC123; Secure Set-Cookie: time=2014-07-04+12%3A34%3A56; Secure # 更に、Webパスを/cgi-binに限定したい時は-pオプションを使う。 $ export HTTPS=ON $ mkcookie -p/cgi-bin cookie_vars.txt Set-Cookie: sectionid=ABC123; path=/cgi-bin; Secure Set-Cookie: time=2014-07-04+12%3A34%3A56; path=/cgi-bin; Secure # コマンド実行時(2014/07/05 10:05:30 JSTとする)から、Cookieの有効期限を5分にする $ mkcookie -e+300 cookie_vars.txt Set-Cookie: sectionid=ABC123; expires=Sat, 05-Jul-2014 01:05:30 GMT Set-Cookie: time=2014-07-04+12%3A34%3A56; expires=Sat, 05-Jul-2014 01:05:30 GMT <備考> RFC 6265 : Cookie処理仕様 RFC 3986(Sec.2.1) : URLエンコーディング仕様 RFC 2616(Sec.3.3.1): expires属性で用いられる日付フォーマット仕様