Movable Type では,コメントのユーザ情報をブラウザのクッキーに記憶させる手段を,JavaScript に依存しています.しかし,セキュリティに関心があるユーザの中には,JavaScript を無効にしているユーザも多いでしょう.当然のことながら,この場合はユーザ情報をブラウザに記憶させることは出来ません.
そこで,JavaScript を用いないで,ユーザ情報をクッキーに書き込むまたは読み出すアドオンを作ってみました.
はじめに
Movable Type では,コメントのユーザ情報をブラウザのクッキーに記憶させる手段を,JavaScript に依存しています.しかし,ユーザの中には,JavaScript を無効にしているユーザも多いでしょう.当然のことながら,この場合はユーザ情報をブラウザに記憶させることは出来ません *1.
クッキーを用いてユーザ情報を記憶させる手段は,次の二つがあります.
- JavaScript
- HTTP ヘッダ
Movable Type では,前者を用いていますが,他の掲示板 CGI ソフトウェアでは,後者を用いていることが多いと思います.そこで,Movable Type で後者を用いてユーザ情報を書き込むまたは読み出すアドオンを作ってみました *2.
JavaScript *3
JavaScript は,ページの内容や動作を動的に構成できる機能の一つです.しかし,セキュリティホールが多く見つかっている機能でもあります.最近では,「Internet Explorerの新セキュリティホールは「極めて危険」(ZDNet)」で挙げられているものが有名です.しかも,このセキュリティホールは,12/25 現在まだ修正されていません.
また,ポップアップウィンドウや,リンクを辿ったときに勝手に新しいウィンドウで開かれる *4のを嫌うユーザもいるでしょう.
以上の理由から,JavaScript を無効にしているユーザも多い *5と考えられます.
*2: Movable Type が標準で持っていても良いはずの機能である,と思う.MT 3.0 ではスパム対策としてコメント周りの機能が強化されるようなので,もしかしたら実装されるのかもしれない,と思う.
*3: 「アクティブスクリプト」もほぼ同義
*4: 新しいウィンドウで開くかどうかは,ページ作成者が決めるのではなく,閲覧しているユーザが決めるべきことだ,と思う.
*5: 無効にしていないユーザが多いのも事実....少なくとも現時点において, IE で有効にしておくのは自殺行為だと思うけどなぁ.
入手先
- comment-cookie.pl (2004/1/30)
重要事項
本アドオンについて,私は著作権を主張しますが,改変・再配布等は自由にしていただいて構いません.なお,本アドオンを用いて発生した損害等の責任を私は一切負いません *6.
本アドオンは,Movable Type で API として提供されているもの以外の機能を用いています.したがって,バージョンによっては正しく動作しない可能性があります.また,導入には,Movable Type 自体に修正を加える必要があります.なお,mod_perl 環境下でのテストは全く行っていません.mod_perl 環境下では,別のユーザの情報が表示されてしまう可能性があります *7.これについて,試してみた方の報告をお待ちしています.
なお,本アドオンの開発は,mod_perlを用いない Movable Type 2.65 の元で行いました.
仕様上の制約
mt-comments.cgi 上でのみ機能します.つまり,エントリごとのアーカイブページ等では機能しないということです.これは以下の理由によります.
- ユーザ情報はページを送出する以前に読み出さなければならないので,静的であるアーカイブページでは動作できない.
- アーカイブページと mt-comments.cgi のパスが同じであるとは限らず,かつその両方で有効なパスを設定した場合,セキュリティ上の問題が発生する可能性がある *8.
導入
comment-cookie.pl をダウンロードし,「(mt.cgi があるディレクトリ)/plugins/」にコピーしてください *9.次に,「Comment Listing Template」を以下を参考に修正してください.修正する点は,下線で表示しています.
<label for="author">Name:</label><br />
<input tabindex="1" id="author" name="author"
value="<$MTCmtCookieAuth encode_html='1'$>" /><br />
<label for="email">Email Address:</label><br />
<input tabindex="2" id="email" name="email"
value="<$MTCmtCookieMail encode_html='1'$>" /><br />
<label for="url">URL:</label><br />
<input tabindex="3" id="url" name="url"
value="<$MTCmtCookieHome encode_html='1'$>" /><br />
投稿者情報をブラウザに記憶させますか?<br />
<input type="radio" id="bakecookie"
name="bakecookie" value="true" />
<label for="bakecookie">記憶させる</label>
<input type="radio" id="forget"
name="bakecookie" value="false" />
<label for="forget">忘れさせる</label>
また,JavaScript を用いてユーザ情報の読み書きをしている部分を削除しておきます.
Comments.pm の修正
「(mt.cgi があるディレクトリ)/lib/MT/App/Comments.pm」について,以下の通り修正してください.
まず, post メソッドの最後にある,
return $app->redirect($link_url);
の直前に以下の行を追加してください.
eval { bakeCommentCookies($app); };
次に,
sub preview { do_preview($_[0], $_[0]->{query}) }
の行を以下のように変更してください.
sub preview {
bakeCommentCookies($_[0]);
do_preview($_[0], $_[0]->{query});
}
以上で導入は完了です.
Comment Cookie の詳細
Comment Cookie は,内部で2つのパッケージが定義されています.一つは Comment Listing Template で用いるタグを定義するパッケージ,もう一つは,クッキーを生成するパッケージです.
タグを定義するパッケージ
- CmtCookieAuth
- 投稿者の名前
- CmtCookieMail
- 投稿者のメールアドレス
- CmtCookieHome
- 投稿者のウェブページの URL
最近の更新履歴
- (2004/02/03) 警告がでるので,関数の上書きをやめる
- (2004/01/30) warnings プラグマを外す
- (2003/12/26) 公開

コメントする