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

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

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm