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
![[PukiWiki] [PukiWiki]](image/sandbox.gif)




