2005年09月11日(Sun) 寝すぎー [長年日記]
● いかん。出張に間に合いません…。
● [tDiary] ワンタイムトークンづくりをまた挫折する
煮詰りつづけて幾星霜。気分転換にRubyをいじろうとしたのですが…。
ツッコミフォームにトークンをしこんでおいて、それが正当なものかどうかをツッコまれた時に確かめると良いのではないかと思う。以前やりかけて挫折していた実装をまたいじってみる。
まずツッコミフォームを表示する際に適当なトークンを作ってサーバー側で作ったことを覚えておく。ツッコミがあった場合には一緒に送られてきたトークンを確認して自分で作ったものか、フォームを表示したのと同じクライアントからのものか、古すぎるものではないか、既に使われたトークンではないかを確認してからツッコミを受け付ける。
問題はサーバー側で作ったトークンを覚えておく、また、使われたトークンは忘れるというところで、PStoreを使うにせよファイルシステムの機能を使うにせよプラグインからファイル操作をしなきゃいけないような気がする。これじゃセキュアモードの日記では動かないのですよ。
うーん。どうしようか。特に使われたトークンを忘れる、という動作はプラグインが読みこまれた時にやるわけにはいかない。
クライアントの情報やツッコミフォームの生成時間などを暗号化したものをトークンにするんじゃだめですか?
あ、だめか「ワンタイム」にならないや。失礼しました。
次善の策はそれかなーと思ってたのですが、一緒にツッコミの数を暗号化すれば良いことに今気づきました。これだとツッコミを書いてるうちに他の人がツッコんで会話がちぐはぐになるのも防げるよ。わあ♪<br><br>…ていうかシゴト。orz
そしてこのホストではrequire 'openssl'できないことに気づく。うーん。入れてもらうかな…。
そしてopensslをお願いしてしまってから、片方向ハッシュ関数でいいことに気づいたのでした。<br>クライアントの情報とフォームの生成時刻とツッコミの数と秘密の文字列をあわせたもののハッシュ値をとって、生の生成時刻とツッコミの数と一緒にクライアントに渡す。ツッコまれた場合には、まずツッコミの現在の数がクライアントが覚えているものと一致してることを確認して、新たに得られたクライアントの情報とクライアントが覚えていた時刻とツッコミ数に秘密の文字列をあわせてハッシュ値をとり、それがクライアントが覚えていたハッシュ値と一緒なのを確認する。実装はそのうち〜。<br>しかしどうやってもdiary.rhtmlを改造しなくちゃいけないのが残念なところです。
最近のツッコまれどころ