PukiWiki/reCAPTCHAプラグインによるspam(スパム)防止機能 http://www.ark-web.jp/sandbox/wiki/312.html
PukiWiki/reCAPTCHAプラグインによるspam(スパム)防止機能
- スパム防止用のPukiWikiライブラリの公開用ページです。
目次 †
名前 †
reCAPTCHA プラグイン - spamボットのいたずら書き込みに対応するPukiWikiプラグイン Version 1.0.0 Copyright (C) 2008 ARK-Web co,. ltd. License: GPL version 2 or (at your option) any later version
対象バージョン †
- 対象のpukiwikiのバージョンは EUC-JP版の pukiwiki-1.4.7_notb です。
http://pukiwiki.sourceforge.jp/?PukiWiki%2FDownload%2F1.4.7- EUC-JP版の pukiwiki-1.4.6 での動作確認が取れました。
必須環境 †
本プラグインが動作する環境として、PEAR本体と「HTTP::Request」および「Net::URL」が必要です。
ホスティングを借りていてPEAR環境を更新できない場合は↓こちらの方法で自分のホームディレクトリに環境が作れます。
- 共有ホストでの PEAR のローカルコピーのインストール
http://pear.php.net/manual/ja/installation.shared.php
ダウンロード †
- reCAPTCHA.tgz (64KB)
- reCAPTCHA.zip (68KB)
reCAPTCHAとは †
reCAPTCHAの説明の前に『CAPTCHA(キャプチャ)』はご存知でしょうか?
Yahoo!の新規登録など、Webサービスでよく使われるようになってきている、画像文字の内容を入力させるアレです。
CAPTCHAの目的は『人間』と『コンピュータ(SpamBot)』を見分けることにあります。画像文字はバイナリデータなので
コンピュータにはすぐには分かりませんが、人間には目で見たり音声で確認すれば短時間で対応できます。
それを書籍のデジタル化に有効活用するように目を向けたのがreCAPTCHAです。reCAPTCHAでは画像文字に単語が2つ出てきます。
このうち1つはCAPTCHAと同じように予め答えの分かっているもので、もう1つはOCRで読み取れなかった単語です。
CAPTCHAのしくみ上、ユーザは「両方正しい単語を入れるだろう」ということで成り立っています。
英語ですが下記のreCAPTCHA公式サイトに詳細な説明があります。
http://recaptcha.net/learnmore.html
pukiwkikiのreCAPTCHAモジュールの特徴 †
- ページを読むだけの閲覧者にはreCAPTCHAによる認証の必要がありません
- 1回reCAPTCHAで認証が取れると、ブラウザを閉じるまで編集が許可されます
- reCAPTCHAで認証が必要となるプラグインを選択できます
- 閲覧者のブラウザがJavaScriptを利用可能なようであれば、モーダルダイアログ中で認証を済ませられます
reCAPTCHAモジュールのデモ †
導入前にまずどのような機能なのかを知っていただくために、デモ環境を用意しました。
http://www.ark-web.jp/sandbox/recaptcha/pukiwiki
※デモ環境は毎日6時に元に戻されます
インストール †
0.ファイルのバックアップを取ります。
1.pukiwikiがインストールされているディレクトリに、pukiwiki配下をアップロードします。
2.pukiwikiのベースファイル(4ファイル分)に追記します。
※追記箇所には全て「// -> (...)」と「// <- (...)」が書いてあります。
2-1.index.phpの先頭に下記のコードを追加します。
// Copyright (C) 2001-2006 PukiWiki Developers Team // License: GPL v2 or (at your option) any later version // -> 2008.02.26 s.g.kohata(reCaptcha) // session session_start(); // <- 2008.02.26 s.g.kohata(reCaptcha) // Error reporting //error_reporting(0); // Nothing
2-2.lib/init.phpに下記のコードを追加します。
define('UA_NAME', isset($user_agent['name']) ? $user_agent['name'] : ''); define('UA_VERS', isset($user_agent['vers']) ? $user_agent['vers'] : ''); unset($user_agent); // Unset after reading UA_INI_FILE // -> 2008.02.26 s.g.kohata(reCaptcha) ///////////////////////////////////////////////// // recaptchaプラグインのチェック define('RECAPTCHA_INI_FILE', PLUGIN_DIR . 'recaptcha.ini.php'); if (! file_exists(INI_FILE) || ! is_readable(INI_FILE)) { define('RECAPTCHA_EXIST', false); } else { require(RECAPTCHA_INI_FILE); define('RECAPTCHA_EXIST', true); } // <- 2008.02.26 s.g.kohata(reCaptcha) ///////////////////////////////////////////////// // ディレクトリのチェック
2-3.skin/pukiwiki.skin.phpに下記のコードを追加します。2箇所あります。
<link rel="stylesheet" type="text/css" media="print" href="skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>&media=print" charset="<?php echo $css_charset ?>" /> <link rel="alternate" type="application/rss+xml" title="RSS" href="<?php echo $link['rss'] ?>" /><?php // RSS auto-discovery ?> <?php // -> 2008.02.26 s.g.kohata(reCaptcha) if (defined('RECAPTCHA_ENABLE_PLUGINS')) print recaptcha_get_script(); // <- 2008.02.26 s.g.kohata(reCaptcha) ?> <?php if (PKWK_ALLOW_JAVASCRIPT && $trackback_javascript) { ?> <script type="text/javascript" src="skin/trackback.js"></script><?php } ?> <?php echo $head_tag ?> (...) <?php } ?> <?php echo $hr ?> <?php // -> 2008.02.26 s.g.kohata(reCaptcha) if (defined('RECAPTCHA_ENABLE_PLUGINS')) { if (!is_recaptcha_checked()) { global $safari_version; if ($safari_version < 500) { echo RECAPTCHA_SAFARI_MESSAGE; echo $hr; } } } // <- 2008.02.26 s.g.kohata(reCaptcha) ?> <?php if (PKWK_SKIN_SHOW_TOOLBAR) { ?> <!-- Toolbar --> <div id="toolbar">
2-4.lib/pukiwiki.phpに下記のコードを追加します。2箇所あります。
///////////////////////////////////////////////// // Include subroutines // -> 2008.02.26 s.g.kohata(reCaptcha) // safariのバージョン確認 // Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ja-jp) AppleWebKit/418 (KHTML, like Gecko) Safari/417.9.3 if (preg_match("/Safari\/([0-9\.]+)$/", $_SERVER['HTTP_USER_AGENT'], $version)) $safari_version = (int)$version[1]; else $safari_version = 500; // <- 2008.02.26 s.g.kohata(reCaptcha) if (! defined('LIB_DIR')) define('LIB_DIR', ''); require(LIB_DIR . 'func.php'); (...) if ($plugin != '') { // -> 2008.02.26 s.g.kohata(reCaptcha) // recaptchaが必要なページか確認 if (defined('RECAPTCHA_ENABLE_PLUGINS')) { // recaptcha用リダイレクト if ($_GET['plugin'] == 'recaptcha') { if ($_GET['action'] == 'status') { header("location: ../plugin/recaptcha.ini.php?action=status"); exit; } else if ($_GET['action'] == 'window') { header("location: ../plugin/recaptcha.ini.php?action=window"); exit; } } if (is_recaptcha_necessary($plugin)) { // 再ポスト時に一時的に無効化 if (isset($_POST['recaptcha_check']) && $_POST['recaptcha_check'] == 'false') ; else { // チェック済みでない場合のみ if (!is_recaptcha_checked()) { // POSTアドレス $_SESSION[RECAPTCHA_SESSION_POSTURL] = $_SERVER['REQUEST_URI']; // 戻りアドレス if (substr($_SERVER['REQUEST_URI'], -9) == "index.php") $_SESSION[RECAPTCHA_SESSION_RETURL] = $_SERVER['HTTP_REFERER']; else $_SESSION[RECAPTCHA_SESSION_RETURL] = $_SERVER['REQUEST_URI']; // POST,GETデータ $_SESSION[RECAPTCHA_SESSION_HTTP_POST] = $_POST; $_SESSION[RECAPTCHA_SESSION_HTTP_GET] = $_GET; $_SESSION[RECAPTCHA_SESSION_AGENT] = $_SERVER['HTTP_USER_AGENT']; $_SESSION[RECAPTCHA_SESSION_COOKIE] = $_COOKIE; header("location: index.php?plugin=recaptcha"); exit; } } } } // <- 2008.02.26 s.g.kohata(reCaptcha) if (exist_plugin_action($plugin)) { // Found and exec $retvars = do_plugin_action($plugin); if ($retvars === FALSE) exit; // Done
3.reCAPTCHAのサイトで、利用登録をします。
http://recaptcha.net/whyrecaptcha.html の[Sign up Now!]で利用登録が可能です。
4.plugin/recaptcha.ini.phpを開いて下記の設定します。
4-1.『RECAPTCHA_PUBLICKEY』と『RECAPTCHA_PRIVATEKEY』に3.で登録した公開キーと秘密キーを入れます。
// http://recaptcha.net/whyrecaptcha.html の[Sign up Now!]で登録した値の設定 define('RECAPTCHA_PUBLICKEY', '公開キーを入れてください'); define('RECAPTCHA_PRIVATEKEY', '秘密キーを入れてください');
4-2.『RECAPTCHA_ENABLE_PLUGINS』にreCAPTCHAの認証が必要になるプラグイン名を ,(カンマ)区切りで入れます。
デフォルトは『comment,newpage,edit,memo,memo2,vote,tracker』が指定してあります。
// reCAPTCHAの対象とするプラグイン名 define('RECAPTCHA_ENABLE_PLUGINS', 'comment,newpage,edit,memo,memo2,vote,tracker');
4-3.pukiwikiにBASIC認証がかかっている場合は、ユーザ名とパスワードを
『RECAPTCHA_BASICAUTH_USER』と『RECAPTCHA_BASICAUTH_PW』に入れます。
※BASIC認証がない場合はそのままで結構です。
// pukiwikiへのアクセスにBASIC認証が必要になる場合は登録します define('RECAPTCHA_BASICAUTH_USER', ''); define('RECAPTCHA_BASICAUTH_PW', '');
5.動作確認として、pukiwikiを開いてページの「編集」ボタンをクリックした後で、
reCAPTCHAの認証が表示されるので、2つの単語を入力して[確認]をクリックします。
その後、ページ新規作成のテキストフィールドが表示されるようなら設定完了です。
更新履歴 †
- 2008/05/08 第一次公開
- 2008/04/16 ベータ版完成
- 本家にコントリビュートしました。 -- 竹村 2008-05-08 (木) 18:49:51