[[PukiWiki/1.4/ちょっと便利に]]

**Akismetによるspam(スパム)防止機能 [#mbe35572]

- &new{2006-12-20 (水) 13:13:16};
- &new{2007-02-11 (日) 14:38:03};

*目次 [#n0b9f4b6]
#contents

*概要 [#gb302814]

>WordPress用スパム対策プラグインとして開発されており、多数のWordPress利用者から「最強」との呼び声が高いプラグイン「Akismet」

を PukiWiki で利用します。
投稿内容をチェックし、Spamを防止することができます。

*事前準備 [#p9f1dddb]

-WordPress API Key の取得
-- Akismet は元々 WordPress 用プラグインとして作られたもので WordPress のユーザ登録をする必要があります。
-- 以下のページからユーザ登録をおこない、APIキーを取得してください。(基本的に無料ですが、商用に利用する場合は有料となります。)
-- http://wordpress.com/api-keys/
-PHP4 Akismet Class のダウンロード
-- Akismet Web API を簡単に利用できるようにしたライブラリ PHP4 Akismet Class を使用します。
-- 以下のページからダウンロードし、akismet.class.php を lib ディレクトリにおいてください。
-- http://miphp.net/blog/view/php4_akismet_class

*ファイルの書き換え [#m5211b89]

lib/pukiwiki.php を変更します。
 // Spam filtering
 if ($spam && $method != 'GET') {
 .
 .
 .
 }
のような箇所があります。そこを以下に置き換えます。<API Key> を取得した API Key に変更します。

 // Spam filtering
 if (isset($vars['msg']) && $method != 'GET') {
 	// SPAM chek by akismet
 	require_once(LIB_DIR . 'akismet.class.php');
 	// load array with comment data
 	$comment = array(
 		'author'       => isset($vars['name']) ? $vars['name'] : '',
 		'email'        => '',
 		'website'      => '',
 		'body'         => $vars['msg'],
 		'permalink'    => '',
 		'user_ip'      => $_SERVER['REMOTE_ADDR'],
 		'user_agent'   => $_SERVER['HTTP_USER_AGENT'],
 	);
 	// instantiate an instance of the class
 	$akismet = new Akismet(get_script_uri(), '<API Key>', $comment);
 
 	// test for errors
 	if($akismet->errorsExist()) { // returns true if any errors exist
 		$akismet_msg = '';
 		if($akismet->isError('AKISMET_INVALID_KEY')) {
 			$akismet_msg = 'akismet : APIキーが不正です.';
 		} elseif($akismet->isError('AKISMET_RESPONSE_FAILED')) {
 			$akismet_msg = 'akisumet : レスポンスの取得に失敗しました';
 		} elseif($akismet->isError('AKISMET_SERVER_NOT_FOUND')) {
 			$akismet_msg = 'akismet : サーバへの接続に失敗しました.';
 		}
 		return array('msg'=>'投稿内容の確認中にエラーが発生しました.', 'body'=>$akismet_msg);
 	} elseif ($akismet->isSpam()) { // returns true if Akismet thinks the comment is spam
 		return array('msg'=>'投稿内容の確認中にエラーが発生しました.', 'body'=>'投稿はスパムと判断されました.');
 	}
 }

**相談所 [#h71c053a]

-案1:$vars['msg'] を使用(現状)
-- comment, article プラグインや edit プラグイン(通常編集)には対応できる
-- tracker の場合設定 :config ページで msg にしなければならない
-- article の subject などがスルー
-案2:$vars 全体を使用
-- ゴミが付く。そのゴミのせいでスパムに間違われはしないか懸念
-- オリジナル小沼版はこの方式のようだが
-案3:こつこつと1つずつ対応
-- たいへん
-- tracker の場合 :config 設定による

*参照 [#ab798c71]

-[[PukiWiki/Akismetによるspam(スパム)防止機能>http://www.ark-web.jp/sandbox/wiki/190.html]] オリジナル小沼版
-http://akismet.com/
-http://miphp.net/blog/view/php4_akismet_class
-[[最強の呼び声高いブログ用対スパムプラグイン「Akismet」- GIGAZINE>http://gigazine.net/index.php?/news/comments/20070127_akismet/]]

*コメント [#xf620ae2]
- 感想などお待ちしています。 -- [[小沼]] &new{2006-12-20 (水) 13:22:45};
- http://www.ark-web.jp/blog/archives/2006/12/pukiwikiakismet.html?rss10 --  &new{2006-12-21 (木) 23:47:03};
- お疲れ様です。Akismetに関する概要説明がこの上のblogエントリにしかありませんから、初めての方は手を出し辛いかもしれません (^^; -- [[henoheno]] &new{2006-12-23 (土) 13:31:00};
- ありがとうございます。確かに手を出しにくいかもしれないですね(^^; -- [[小沼]] &new{2006-12-25 (月) 09:52:17};
- GIGAZINEによる紹介((最初にpostした方へ:あまりに補足がなさすぎて、SPAMと間違われて消されていましたよ)) http://gigazine.net/index.php?/news/comments/20070127_akismet/ --  &new{2007-01-28 (日) 08:21:34};
- 1.4.7にて導入してみようとしたのですが、動きませんでした。lib/pulgin.php を書き換えて適用した時点で全てwikiが固まります --  &new{2007-01-30 (火) 03:33:10};
- 私もAkismetはBlogで使用していますが、非常に強力で重宝しています。導入して2ヶ月、一度もSPAMを突破された事がありません。PukiWikiで公式に利用できるようになると非常に嬉しいです。 -- [[AntiSpam]] &new{2007-02-07 (水) 12:06:45};
-- こうした外部のシステムを(一つじゃなく、管理者の任意の種類と数)呼べるように、anti-spam機構の下地を作ればいいんだろうなあと思っています。 -- [[henoheno]] &new{2007-02-10 (土) 21:36:25};
- クラスの仕様が変わって既に小沼さんのakismet_filter.phpの内容は古くなっているようです。以下にcommentプラグインを直接改造する例を挙げておきます。(comment.inc.php 30行目付近。<PukiWikiのURI>と<API Key>は各サイトに合わせて変更) --  &new{2007-02-09 (金) 02:14:52};
  if (! isset($vars['msg'])) return array('msg'=>'', 'body'=>''); // Do nothing
 
 +//////////////////////////////////////////////
 +// SPAM chek by akismet
 +require_once(LIB_DIR.'akismet.class.php');
 +	
 +// load array with comment data
 +$comment = array(
 +	'author'       => $vars['name'],
 +	'email'        => '',
 +	'website'      => '',
 +	'body'         => $vars['msg'],
 +	'permalink'    => ''
 +);
 +	
 +// instantiate an instance of the class
 +$akismet = new Akismet('<PukiWikiのURI>', '<API Key>', $comment);
 +
 +// test for errors
 +if($akismet->errorsExist()) { // returns true if any errors exist
 +	$akismet_msg = '';
 +	if($akismet->isError('AKISMET_INVALID_KEY')) {
 +		$akismet_msg = 'akismet : APIキーが不正です.';
 +	} elseif($akismet->isError('AKISMET_RESPONSE_FAILED')) {
 +		$akismet_msg = 'akisumet : レスポンスの取得に失敗しました';
 +	} elseif($akismet->isError('AKISMET_SERVER_NOT_FOUND')) {
 +		$akismet_msg = 'akismet : サーバへの接続に失敗しました.';
 +	}
 +	return array('msg'=>'投稿内容の確認中にエラーが発生しました.', 'body'=>$akismet_msg);
 +} else {
 +	if ($akismet->isSpam()) { // returns true if Akismet thinks the comment is spam
 +		return array('msg'=>'投稿内容の確認中にエラーが発生しました.', 'body'=>'投稿はスパムと判断されました.');
 +	}
 +}
 +//////////////////////////////////////////////
 
  $vars['msg'] = str_replace("\n", '', $vars['msg']); // Cut LFs
- コメント以外にも全ての編集にAkismetのチェックをしたいのですがどのように改造すればいいのでしょうか? --  &new{2007-02-10 (土) 18:45:12};
-- 今の[[CVS版]](1.4.8_alpha) の [[cvs:lib/pukiwiki.php]] にはまさにそんな感じの処理があるかもしれません。GET以外の処理について、プラグインの判定と下処理をした上で、その内容を全部関数に渡すようなものが。ここをもう少し拡張して、こうした外部サービスを呼べるようにすればいいんではないかなと思っています。 -- [[henoheno]] &new{2007-02-10 (土) 21:38:24};
- オリジナルの小沼さん版が動作しないとのことなので今現在のまとめ的なものに内容を整頓しました。 --  &new{2007-02-11 (日) 14:38:03};

#comment

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u8. HTML convert time: 0.085 sec.

OSDN