トップ «前の日記(2011-04-27) 最新 次の日記(2011-05-27)» 編集

Route 477



2011-05-02

[hiki] Hikiにチェックボックス方式のスパム防止を組み込んでみた

2011年においては、スパム防止機能のないWikiエンジンは使いものにならない。Hikiではデフォルトでベイズフィルタと単語フィルタによるスパム防止機能が使えるが、 個人的にもっとメンテナンスフリーなやつが欲しかったので、

□ I'm human ■ I'm robot

みたいなチェックボックス方式のスパム防止機能を作ってみた。これをオン/オフにしたときだけ書き込めるようになる。

1. プラグインの用意

以下のようなrobothuman.rbというファイルをプラグイン置き場(デフォルトはmisc/plugins/)に作る

add_edit_proc do
  %{
    <div id="robothuman">
      Spam Check:
      <input type="checkbox" name="human"> I'm human
      <input type="checkbox" name="robot" checked> I'm robot
    </div>
  }     
end  

2. hiki/command.rbの編集

ほんとはプラグイン側でスパム判定したかったのだけど、方法が分からなかった(無い?)のでcommand.rbを直接書き換える。

366行目の

     def cmd_save( page, text, md5hex, update_timestamp = true )

の下に一行追加して、

   def cmd_save( page, text, md5hex, update_timestamp = true )
     raise "spam check failed; see the checkboxes" if @params['robot'][0] || (@params['human'][0].nil?)

のようにする

3. プラグインの有効化

管理画面にログインして、プラグインrobothuman.rbを有効にする。

補足

  • 導入したばっかりなので効果は不明
  • 本気でやるならreCAPTCHAだけどさすがに編集がめんどいよね
  • JavaScriptで自動的にオン/オフ状態にするバージョン
add_edit_proc do
  %{
    <div id="robothuman">
      Spam Check:
      <input type="checkbox" name="human" id="im_human"> I'm human
      <input type="checkbox" name="robot" id="im_robot" checked> I'm robot
    </div>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $("#im_human").attr("checked", true);
        $("#im_robot").attr("checked", false);
      });
    </script>
  }   
end