- バックアップ一覧
- ソース を表示
- PukiWiki/Akismetによるspam(スパム)防止機能 は削除されています。
- 1 (2006-12-12 (火) 18:52:03)
- 2 (2006-12-12 (火) 18:52:03)
- 3 (2006-12-12 (火) 22:14:11)
- 4 (2006-12-13 (水) 17:23:10)
- 5 (2006-12-13 (水) 17:23:10)
- 6 (2006-12-13 (水) 17:23:10)
- 7 (2006-12-13 (水) 17:23:10)
- 8 (2006-12-13 (水) 17:23:10)
- 9 (2006-12-13 (水) 17:23:10)
- 10 (2007-02-15 (木) 17:21:54)
- 11 (2007-02-23 (金) 12:33:48)
- 12 (2007-02-23 (金) 12:40:52)
- 13 (2007-02-23 (金) 16:41:35)
- 14 (2007-03-29 (木) 16:40:38)
- 15 (2007-04-20 (金) 15:25:54)
- 16 (2007-05-12 (土) 19:41:04)
- 17 (2007-05-28 (月) 13:15:34)
- 18 (2007-05-29 (火) 10:59:15)
- 19 (2007-05-29 (火) 14:57:52)
- 20 (2007-06-01 (金) 10:27:48)
- 21 (2007-06-02 (土) 23:41:41)
- 22 (2007-06-03 (日) 10:13:52)
- 23 (2007-06-04 (月) 10:42:47)
PukiWiki/Akismetによるspam(スパム)防止機能?
- 見習い中の小沼?です。
- スパム防止用のPukiwikiライブラリを作成しましたので公開いたします。
最新版のWiki(1.4.7)では動作しないとのことです。現在対応方法を検討中ですが、今すぐお使いになりたい方は、下記ページに対応策を書いていただいてますので、そちらを参照してください。
PukiWiki/1.4/ちょっと便利に/Akismetによるspam(スパム)防止機能
目次 †
spam(スパム)対策が必要になった契機 †
- 当ホームページの中にアークウェブ プロジェクト管理方法ご紹介?というページがあります。
- そのページにPukiWikiのプラグインであるtrackerを置いているのですが、そこが今月(2006年12月)の頭ごろからスパムの標的になってしまいました。
- ひどいときは一日に20件近く投稿されていました。
- 会社のWebサイトがスパムだらけになってしまったら、まるでメンテナンスができていないような印象を与えてしまい、会社のイメージを大きく傷つけます。
- かといって、毎回手作業でスパム投稿を削除していたのでは大変ですので、今回PukiWikiのスパム防止機能を作成することになりました。
Akismetについて †
- Akismetというスパムチェック用のWebAPIがあります。
http://akismet.com/development/ - 今回のspam対策にこのAPIを利用させていただきました。
導入方法 †
- 今回作成した機能を利用される方は以下の手順をおこなってください。
事前準備 †
- webapi登録
- まずAkismetにユーザ登録をする必要があります。
- 以下のページからユーザ登録をおこない、APIキーを取得してください。(基本的に無料ですが、商用に利用する場合は有料となります。)
http://wordpress.com/api-keys/
- 以下のページからユーザ登録をおこない、APIキーを取得してください。(基本的に無料ですが、商用に利用する場合は有料となります。)
- まずAkismetにユーザ登録をする必要があります。
- Akismetクラスダウンロード
- 以下のページからPHP4用のAkismetクラスをダウンロードしてください。
http://miphp.net/blog/view/php4_akismet_class
- 以下のページからPHP4用のAkismetクラスをダウンロードしてください。
- ライブラリをダウンロード
- ここからダウンロードしてください。
#ref(): File not found: "akismet_filter.php" at page "PukiWiki/Akismetによるspam(スパム)防止機能"
- ここからダウンロードしてください。
ファイル書き換え †
いくつか書き換えが必要な箇所があります。
- akismet_filter
- 先ほどダウンロードしたakismet_fileter.phpに以下のような記述があります。
/* * 使用時に以下の定数を書き換えてください。 */ //チェック対象とするプラグイン名。カンマ区切り define('PLUGIN_NAME_WITH_AKISMET_CHECK', 'comment,tracker'); //Akismetで取得する。APIキー define('API_KEY', ''); //あなたのサイトのURL define('URL','http://ark-web.jp'); //あなたのサイトのパーマリンク define('PERMA_LINK','http://ark-web.jp');
- ここを適切な値で書き換えてください。
- 先ほどダウンロードしたakismet_fileter.phpに以下のような記述があります。
- plugin.php
- actionが呼ばれたときに、スパムチェック機能が呼び出されるように、plugin.phpを書き換える必要があります。
- plugin.phpの中にdo_plugin_action()という関数があります。その中にakismet_filter.phpを呼び出す記述をしてください。以下のようになると思います。
function do_plugin_action($name) { if (! exist_plugin_action($name)) return array(); if(do_plugin_init($name) === FALSE) die_message('Plugin init failed: ' . $name); //Akismet Spam Filter require_once(LIB_DIR . 'akismet_filter.php'); if ( is_spam_message($_POST, $name) == "1" ) die_message("Spam check faild. Plugin:$name"); $retvar = call_user_func('plugin_' . $name . '_action'); ...略
- plugin.phpの中にdo_plugin_action()という関数があります。その中にakismet_filter.phpを呼び出す記述をしてください。以下のようになると思います。
- actionが呼ばれたときに、スパムチェック機能が呼び出されるように、plugin.phpを書き換える必要があります。
ファイルのアップロード †
- ダウンロードしたakismet(Akismet.class.php )と、akismet_fileter.phpをpukiwikiのライブラリフォルダに配置してください。
pukiwiki/lib/Akismet.class.php pukiwiki/lib/akismet_fileter.php
これで設定は全てです。
画面から操作し、正しく動くことを確認してください。
内部的なこと †
- このSpam対策の仕組みをご説明します。といっても大したことはしていません。
- まず作成したakismet_filter.phpは以下のようになっています。
<?php require_once 'Akismet.class.php'; /* * 使用時に以下の定数を書き換えてください。 */ //チェック対象とするプラグイン名。カンマ区切り define('PLUGIN_NAME_WITH_AKISMET_CHECK', 'comment,tracker'); //Akismetで取得する。APIキー define('API_KEY', ''); //あなたのサイトのURL define('URL','http://ark-web.jp'); //あなたのサイトのパーマリンク define('PERMA_LINK','http://ark-web.jp'); function is_spam_message($post_data, $plugin_name){ //PLUGIN_NAME_WITH_AKISMET_CHECKを配列に変換 $plugin_names = explode(",", PLUGIN_NAME_WITH_AKISMET_CHECK); if (in_array($plugin_name, $plugin_names)) { //チェック対象のプラグインの場合。 $akismet = new Akismet(URL, API_KEY); $akismet->setAuthor("pukiwiki"); $akismet->setContent( var_export($post_data, true) ); $akismet->setPermalink(PERMA_LINK); return $akismet->isSpam(); } return false; } ?>
- is_spam_messageが呼ばれると、実行されるプラグインが処理対象とするもの、つまり定数PLUGIN_NAME_WITH_AKISMET_CHECKで指定されているもの(上記例の場合trackerとcomment)であるかを判定をおこないます。
- 処理対象のプラグインであった場合は、postデータをAkismetクラスに渡し、スパム投稿かどうかの判定を行っています。
- まず作成したakismet_filter.phpは以下のようになっています。
- 次にplugin.phpを以下のように書き換えることによって、アクションが実行された場合に、先ほどのis_spam_message関数が呼ばれるようにしています。
require_once(LIB_DIR . 'akismet_filter.php'); if ( is_spam_message($_POST, $name) == "1" ) die_message("Spam check faild. Plugin:$name");
以上です。