以前からの懸案であったが、 公開サーバ上にマイブックマークページを置く作業を開始した。 どこからでも、 どのブラウザからでも参照できるようにするためだが、 自分以外には見せないように、 パスワードをつけてある。
しかしただのBasic認証では使い勝手が悪い。 以下の要件を満たすように考えた。
構造はこんな感じ。
ブックマークファイル:
if (クッキーあり) {
クッキー期限延長;
キャッシュさせないようなヘッダ出力;
ブックマーク本体表示;
クッキークリアへのリンクも表示;
} else {
乱数でチャレンジナンバー表示;
パスワード入力フォーム;
チャレンジとパスワードを持ってクッキーセットページへ;
}
クッキーセットページ:
持ってきたチャレンジから内緒の演算を施してパスワードを生成;
if (ここへはブックマークファイルのフォームからやってきていて、
かつ、持ってきたパスワードと演算したパスワードが一致する) {
クッキーを設定する;
}
Location:でブックマークファイルへ即戻り;
クッキークリアページ:
クッキーをクリアする; Location:でブックマークファイルへ即戻り;
チャレンジは、例えば4桁の数字。 内緒の演算は、人前で入力することになっても悟られない程度で、 かつ一瞬で暗算できる程度のもの。 例えば、最初の3つの桁の数字を足して1を加える、のような。 暗算力に自信があるなら、 各桁の数字を足し算してさらに四乗する、でも良い :-)
人のマシンを借りて開くときには、 まずブラウザのウィンドウを新規に開き(ショートカットはCTRL+N)、 マイブックマークにアクセスしてパスワード入力。 使い終わったらクッキークリアしておく。
キャッシュさせない制御は、 PHPマニュアルのheader()のページを参考。
PHPで書いているが、 Perl等を使ったCGIでも書けるはず。