PukiWiki article 用 CAPTCHA プラグイン article_kcaptcha.inc.php
忙しくて更新が滞っています.すいません.一応まだ生きております.
PukiWiki のスパム対策のひとつに,PHP の KCAPTCHA ライブラリを用いて CAPTCHA を実装したシリーズがあります.
インストール方法は,pcomment_kcaptcha.inc.php のインストール方法 に準じます.5,6 の代わりに以下の article_kcaptcha.inc.php を plugin ディレクトリにアップロードすればおk.
使用の際には,標準の article を article_kcaptcha に置き換えればおkです.
不具合,バグ等ありましたらお知らせ下さい.
<?php /* article_kcaptcha.inc.php KCAPTCHA認証つきarticleプラグイン Copyright (C) 2007 nao <nao_at_s164.xrea.com> Based on pcomment_kcaptcha.inc.php by XLiX License: GNU GPL 2 */ require_once(PLUGIN_DIR . 'article.inc.php'); // 入力が間違っている時のエラー文 define('WRONG_WARNING', '入力文字列が間違っています'); // 文字列入力欄の説明 define('CAPTCHA_DESC', '画像の文字列を入力して下さい'); // 入力欄の長さ (size) define('CPT_INPUT_SIZE', 6); // 入力欄の最大入力文字数 (maxlength) define('CPT_INPUT_MAX', 6); function plugin_article_kcaptcha_action() { global $vars; if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){ } else { return array('msg'=>WRONG_WARNING); } unset($_SESSION['captcha_keystring']); // article.inc.phpにバトンタッチ return plugin_article_action(); } function plugin_article_kcaptcha_convert() { global $script, $vars, $digest; global $_btn_article, $_btn_name, $_btn_subject; static $numbers = array(); if (PKWK_READONLY) return ''; // Show nothing if (! isset($numbers[$vars['page']])) $numbers[$vars['page']] = 0; $article_no = $numbers[$vars['page']]++; // kcaptcha $kcaptcha_img = "kcaptcha/index.php?".session_name()."=".session_id(); $desc_str = CAPTCHA_DESC; $cpt_input_size = CPT_INPUT_SIZE; $cpt_input_max = CPT_INPUT_MAX; $s_page = htmlspecialchars($vars['page']); $s_digest = htmlspecialchars($digest); $name_cols = PLUGIN_ARTICLE_NAME_COLS; $subject_cols = PLUGIN_ARTICLE_SUBJECT_COLS; $article_rows = PLUGIN_ARTICLE_ROWS; $article_cols = PLUGIN_ARTICLE_COLS; $string = <<<EOD <form action="$script" method="post"> <div> <input type="hidden" name="article_no" value="$article_no" /> <input type="hidden" name="plugin" value="article_kcaptcha" /> <input type="hidden" name="digest" value="$s_digest" /> <input type="hidden" name="refer" value="$s_page" /> <label for="_p_article_name_$article_no">$_btn_name</label> <input type="text" name="name" id="_p_article_name_$article_no" size="$name_cols" /><br /> <label for="_p_article_subject_$article_no">$_btn_subject</label> <input type="text" name="subject" id="_p_article_subject_$article_no" size="$subject_cols" /><br /> <textarea name="msg" rows="$article_rows" cols="$article_cols">\n</textarea><br /> <img src="$kcaptcha_img" /> <input type="text" name="keystring" size="$cpt_input_size" maxlength="$cpt_input_max" /> ($desc_str) <input type="submit" name="article" value="$_btn_article" /> </div> </form> EOD; return $string; } ?>