PukiWiki/reCAPTCHAプラグインによるspam(スパム)防止機能 http://www.ark-web.jp/sandbox/wiki/312.html

PukiWiki/reCAPTCHAプラグインによるspam(スパム)防止機能

[edit]

目次

[edit]

名前

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
[edit]

対象バージョン

[edit]

必須環境

本プラグインが動作する環境として、PEAR本体と「HTTP::Request」および「Net::URL」が必要です。

ホスティングを借りていてPEAR環境を更新できない場合は↓こちらの方法で自分のホームディレクトリに環境が作れます。

[edit]

ダウンロード

[edit]

reCAPTCHAとは

demo_img.gif

reCAPTCHAの説明の前に『CAPTCHA(キャプチャ)』はご存知でしょうか?
Yahoo!の新規登録など、Webサービスでよく使われるようになってきている、画像文字の内容を入力させるアレです。

CAPTCHAの目的は『人間』と『コンピュータ(SpamBot)』を見分けることにあります。画像文字はバイナリデータなので
コンピュータにはすぐには分かりませんが、人間には目で見たり音声で確認すれば短時間で対応できます。

それを書籍のデジタル化に有効活用するように目を向けたのがreCAPTCHAです。reCAPTCHAでは画像文字に単語が2つ出てきます。
このうち1つはCAPTCHAと同じように予め答えの分かっているもので、もう1つはOCRで読み取れなかった単語です。

CAPTCHAのしくみ上、ユーザは「両方正しい単語を入れるだろう」ということで成り立っています。

英語ですが下記のreCAPTCHA公式サイトに詳細な説明があります。

http://recaptcha.net/learnmore.html

[edit]

pukiwkikiのreCAPTCHAモジュールの特徴

[edit]

reCAPTCHAモジュールのデモ

導入前にまずどのような機能なのかを知っていただくために、デモ環境を用意しました。

http://www.ark-web.jp/sandbox/recaptcha/pukiwiki
※デモ環境は毎日6時に元に戻されます

[edit]

インストール

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 ?>&amp;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つの単語を入力して[確認]をクリックします。
 その後、ページ新規作成のテキストフィールドが表示されるようなら設定完了です。

[edit]

更新履歴

投稿者竹村 | パーマリンク | コメント(1)

| append.gif

tag: PHP, PukiWiki, Spam, reCAPTCHA, CAPTCHA


添付ファイル: filereCAPTCHA.zip 1658件 [詳細] filereCAPTCHA.tgz 1818件 [詳細] filedemo_img.gif 1909件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-05-08 (木) 19:26:17 (5793d)

アークウェブのサービスやソリューションはこちら