2005-01-18

tDiary むずいな

コメント spam 対策をしようとして sheepman 方式 を 2.0 の filter の形で実装してみたんだけど、手元では動いたのにどうもこのサーバでは動かないらしく、諦めて外した。

ここで問題発生。具体的には td2 のファイルがあると tDiary が返ってこなくなる。しょうがないからこれも削除して、バックアップしておいたデータに戻した。これで元通りかと思ったらまだ。コメントが反映されない。データとしては存在しているんだけど反映されない。referer はちゃんと出るんだけどコメントは出ない。

残念ながらこれの回復方法が分からない。まいったなぁ。

しかし今回の動きって、filter プラグラムを失敗するとデータが壊れる可能性があるってことなのかなぁ。なんかこえーな。

ちなみに「filter の動作に失敗して td2 がある限り返ってこない」という状況は手元のテスト環境(Debian woody Ruby 1.6.7)でも再現している。Ruby 1.8 な環境では試していない。

[追記] ツッコミが追加されたら過去のツッコミも復活した。

やっぱ日本人が大人しいだけか?

sheepman 方式ツッコミ spam 対策を採用やめた

一度載っけたんだけどうまく動かなくてすぐに削除していたエントリ。原因は初期化ミスと断定してよさそうなので再公開。

【警告】以下を適用すると TrackBack を受け付けられなくなります。tDiary は TrackBack もツッコミの一種として扱っていて、なおかつこれを書いた時点(2005-02-03)で TrackBack とツッコミをフィルタプログラムから判別する方法が分からなかったためです。ハハハハさんの コメントキーフィルタ&プラグイン では回避できていますのでそちらをどうぞ。これ書いた私はもう使ってません。

羊堂本舗の コメントスパム 方式を tDiary 2 の filter 形式で実装することにした。とりあえず動いているみたいだけどなんだか分かっていないので tDiary ハカーの方々に直してもらいたいです。

プラグイン(misc/plugin/comment_key.rb)

require 'digest/md5'
alias :orig_comment_name_label :comment_name_label

def comment_name_label
  @conf.options['comment_key'] ||= ""
  v = Digest::MD5.hexdigest( @conf.options['comment_key'] + @date.strftime( '%Y%m%d' ))
  %Q!<input type="hidden" name="key" value="#{v}">\n! + orig_comment_name_label()
end

置くと設定画面でプラグインを有効にしようが無効にしようが問答無用で効きます。

フィルタ(tdiary/filter/sheepman.rb)

require 'digest/md5'
module TDiary
  module Filter
    class SheepmanFilter < Filter
      def comment_filter( diary, comment )
        @conf.options['comment_key'] ||= ''
        v = Digest::MD5.hexdigest( @conf.options['comment_key'] + @cgi.params['date'][0])
        v == @cgi.params['key'][0]
      end
    end
  end
end

で、tdiary.conf に

@options['comment_key'] = '秘密の文字列'

を追加。たぶん真面目に form から spam を送りつけてくるプログラムが現れたら無力化してしまうんだけど、かっこよさげという言葉を信じて採用。

以下、たったこれだけを作るのにめっちゃ苦労した感想。

  • 渡ってくる comment でどうにかなるものと思い込んで tdiary.rb も読まずに悪戦苦闘
  • もともと tDiary の中身が全然分かっていないんだけど、@options で値が取れると思い込んで悪戦苦闘(plugin では取れるけど filter では取れない)
  • tDiary に RDoc コメント埋め込みまくってくれるスーパーマンが現れたらいいなー
  • tDiary 関係のものをいじるときはまず expand -2 してからだ

tDiary はトランザクションの処理が入ってるみたいで、一度失敗するとその原因を取り除くだけでなくトランザクションをなかったことにする必要があるみたい。いやーハマったハマった。

つーかほんとは

spam なツッコミをスマートに削除したうえで makerss.rb にうまくそれが伝わるような方法がほしかったり。

ぎゃー

コメントキーフィルタ&プラグイン

もう完成度の高いやつあんじゃんorz ばかすぎ。

しかもここの日記によるとすでに破られているらしいじゃないかorz

どうして中山文科相なのだろう

中山成彬文科相の教育観と文教政策を問う

衆議院議員「中山 成彬ホームページ」へようこそ! からプロフィールを見てもどこにも教育の話って出てこないわけで。こういう人がそう簡単に「方針転換」を決めちゃうのってあぶないと思うんだけどなぁ。発言を見聞きしても「これまでの経緯」を軽視してる感じアリアリだし。最近の調査が自分の中では完全に追い風として吹いちゃってるんだろうな。。。

About

例によって個人のなんちゃらです