電網工房・匠のWikiFarmでのHikiのspam対策の改造

ここしばらく電網工房・匠のWikiFarmにて、忘れたときに備えた記録 - Hikiへのスパムの改造に手を加えて適用しております。AタグとBBcodeの入った書き込みを排除するだけで、spam投稿を消して回る必要が飛躍的になくなり、たいへん心安らかになりました。

特定のキーワードを排除すればスパムの大半は排除できるというのは、自前の掲示板などではずいぶん昔から導入して効果があったのですが、Hikiについては、コードを追いかけるのが面倒で放置していたんですよね。Spam対策のプラグインを作るといった話題のあったblogもありましたし。

しかしまあ、いいかげん二万ページ以上にもなりますと、監視もおっくうです。特にBBSプラグインでのコメント投稿のSpamを一々元に戻すのにはウンザリしていました。そこで久しぶりに検索してみて回って、スパム対策の改造をみかけたので入れてみたのでした。
しかし元々のコードは、通常の[編集]での時にしか機能しないようで。メソッド名からすると、てっきり hiki/command.rb のcmd_saveメソッドで全部まとめて弾けるかと思ってたら、そうもいかんようでした。しかたないので /misc/plugin/trackback.rb の trackback_post と /misc/plugin/comment.rb の comment_post にも同様のものを入れてみました。もっとまとめて処理できる適切な場所とか、フックとか、あるのかもしれませんけどね。

うちでは、command.rbのは以下のようにしてます。antispamary という配列に条件を仕込んでメンテナンス性をすこし上げといたのと、キーワードにhttpを含む時にもスパムと判定するようにしたのが改変点ですね。あとページのWikiNameを入れるようにしました。

 
unless @plugin.admin?
  antispamary = [ /\[\/URL/i, /viagra/i, /<a>]*href=[^>]*>/i, /ringtone/i , /xxx/i ]
  case title+text+@params['keyword'][0].to_s
  when *antispamary
    open(%[|mail -s "Anti spam on Hiki" sf\@trpg.net], "w") do |f|
      f.puts "page: #{page}"
      f.puts "text:\n#{text}\n----\n\n"
      f.puts "keyword:\n----\n#{@params['keyword'][0].to_s}\n----"
    end
    @cmd = 'edit'
    return cmd_edit( page, text, "It's NG-Word!!!Are you SPAMMER!?")
  end
 
  case @params['keyword'][0].to_s
  when /http/
    open(%[|mail -s "Anti spam on Hiki" sf\@trpg.net], "w") do |f|
      f.puts "REMOTE_ADDR : #{ENV['REMOTE_ADDR']}"
      f.puts "page: #{page}"
      f.puts "text:\n#{text}\n----\n\n"
      f.puts "keyword:\n----\n#{@params['keyword'][0].to_s}\n----"
    end
    @cmd = 'edit'
    return cmd_edit( page, text, "Are you SPAMMER!?")
  end
 
end
 

この記事へのトラックバックURL:

http://drupal.cre.jp/trackback/487

スパムがないと快適

bbs.rbを忘れていたのに気がついてませんでしたが、それにも同様に処理コードを入れときました。

結果、毎日何十もあったスパムをほぼ排除することに成功しました。ありがたや。
本家のコードにも、禁止ワード機能などは入れて欲しいですね。

上記の例はプラグインごとに入れてるので洗練されていないんで、もちっと汎用的に禁止文字列を設定しやすいように、かつ一ヶ所で済むように入れてもらえればいいなあと思います。全容を理解しているわけではないんで、そのへん上手くやる手はちょっと見えないんですよね。


この記事をブックマーク

人気コンテンツ