レ点腫瘍学ノート

日記/2022年/12月2日/Pukiwikiのスパム対策akismet.inc.phpプラグイン の履歴ソース(No.3)

#author("2022-12-03T15:49:17+09:00;2022-12-02T22:15:25+09:00","default:tgoto","tgoto")
&tag(pukiwiki);

#ref(https://oncologynote.com/img/f39dac16f2.png,nolink)

sonotsさんが2008年頃に作られたakismet.inc.phpが、recaptcha.netの廃止などによって動作しなくなっていたので、Google recaptcha v2に対応させてみました。

プラグイン内の設定で、akismetだけ使う、またはGoogle reCaptcha v2だけ使う、あるいは両方とも使う(akismetがスパムの可能性ありと判定したものだけreChaptchaの画像認証をさせる)ということが切り替えられます。

無理矢理動かしているので、色々と細かいところは動作確認できていません。v2.0.2はPHP7.4、8.0、8.1RC5でひとまず動くことを確認しています。

* 事前準備 [#e1086095]

** WordPress API Key の取得 [#se237130]
- Akismet は元々 WordPress 用プラグインとして作られたもので WordPress のユーザ登録をする必要があります。
- 以下のページから WordPress.com ユーザ登録をおこなうとAPIキーを取得できます。(基本的に無料ですが、商用に利用する場合は有料となります。)
- http://wordpress.com/api-keys/img → http://wordpress.com/signup/img

** reCAPTCHA API Key の取得 [#meb56568]
- SPAM 取り消し報告をする際に、Google reCAPTCHAを利用した CAPTCHA(歪曲文字)認証を導入しています。Google reCAPTCHA v2に対応しています。v3およびEnterpriseには対応していません。
- 以下のページで設置予定サイトのドメインを入力すると、APIキー(publickey, privatekey)を取得できます。(無料です)
- https://www.google.com/recaptcha/about/

プラグイン本体は下記GitHubからダウンロードして、プラグインフォルダにakismet.inc.phpを設置してください。また、Pukiwiki本体のlib/pukiwiki.phpの修正が必要です。

#ogp(https://github.com/m0370/pukiwiki_akismet.inc.php)

** lib/pukiwiki.phpの修正 [#ccfde9ad]

下記の場所に // Akismet Spam filtering 以下のif文を付け加えます。

 if (isset($vars['cmd'])) {
         $is_cmd  = TRUE;
         $plugin = & $vars['cmd'];
 } else if (isset($vars['plugin'])) {
         $plugin = & $vars['plugin'];
 } else {
         $plugin = '';
 }
 // Akismet Spam filtering
 if (exist_plugin('akismet')) { // require_once
     PluginAkismet::spamfilter();
 }

** recaptcha.jsの読み込み [#pdd697f9]

本体のスキンで下記の行を読み込んでおきます。

 <script src="https://www.google.com/recaptcha/api.js" defer></script>

* 追記 [#r935b97c]

当初はPHP7.4まででしか動作しませんでしたが、2022.12.3に公開した[[v2.0.2>https://github.com/m0370/pukiwiki_akismet.inc.php/tree/1ec3191668d553cf8c8ae881cdcba565cc17092c]]からはPHP8(PHP8.0、PHP8.1)でも動作可能になっているはずです。

- static functionの前に'static'の単語を挿入しました(3箇所)。
- function AkismetHttpClientやfunction Akismetをfunction __constructに修正しました。
- 996行目のisError(SERVER_NOT_FOUND)をisError('SERVER_NOT_FOUND')に修正しました。

#ogp(https://amzn.to/3F046BR)

#navi(日記/2022年)

#pcomment