WordPressで合理的なコメントスパム対策

広告だらけ
©いらすとや.

ブログのコメント登録の方針を簡素化

WordPressでコメント機能を有効にするとブログの記事を読んだ方からご意見ご感想をいただくことができます。 SEO的にどうかという見方もあるかもしれませんが、「俺様のお言葉ブログ」でなければ何らかのフィードバックは欲しいでしょうからコメント機能をオンにするサイトオーナーは多いでしょう。
しかし、コメント欄を付けると記事の読者さんからのご意見ご感想の数百数千数万倍のコメントスパムが付くことになります。コメントスパムはほぼ全て何らかの広告か詐欺で、それが大量だと非常に迷惑です。
WordPressでは標準で付属するAkismetプラグインを使用することでコメントスパムを自動的にスパムとそうでなさそうなコメントを分類してくれます。これでコメント管理がラクになる可能性がありますが、実際に使ってみると英語コメントの検知は良好ではあるもののフォールスポジティブ(擬陽性)/フォールスネガティブ(偽陰性)が無いわけではないので結局全てのコメントをリスト表示して確認することになります。スパマーに存在を認識されているようなブログだと1日に数十〜数百件のコメントスパムが登録されるので目を通すのが面倒でしょう。

広告/詐欺のコメントスパムは、ほぼ全て1つ以上のURL(リンク)が含まれています。大抵は自動送信なのでコメント送信についてのルールを表示していても従ってくれることありません。これに対してページの読者さん(人間)のご意見ご感想コメントはURLが含まれないことが多いでしょうし「URLを含めないで下さい」などと表示しておけばそれに従って貰える筈です。
ということは、「URLを含めないで下さい」と表示した上で、URLが含まれなければコメントとして登録(ただし公開保留)し、URLが含まれていれば登録せずに廃棄する。これが最も簡単で合理的です。余計な仕組み(Akismetプラグイン等)も要りません。不要なプラグインはなるべく削除しましょう。

WordPressの設定

WordPressのコメントスパム対策 1
WordPress管理パネルの「設定」から「ディスカッション」の設定でコメントを許可した上で、「コメント内で許可されないキーワード」にURLに含まれる文字列を登録する。「 http 」(これは https も当てはまる)や「 :// 」がそれ。他にコメントスパムの発信元IPアドレスやコメントスパムに含まれる単語などを書く。(1行に1つ書く)
設定変更したら一番下の「設定の保存」を忘れずに。

WordPressのコメントスパム対策 2
記事のコメント欄でコメント本文にURL (上の画像では https://example.com/test )を含めて「コメントを送信」する。

WordPressのコメントスパム対策 3
設定変更をしただけの場合は、WordPressの管理パネルのコメントページで「ゴミ箱」に直接入るようになる。ゴミ箱に入った場合は「コメントが○件の通知」の赤丸は表示されない。これが「コメント内で許可されないキーワード」に登録した文字列がヒットした場合のデフォルトの動作。
「コメント内で許可されないキーワード」に登録した文字列がヒットしなかった(URLが含まれない)場合は「ゴミ箱」ではなく「承認待ち」に入る。管理人が内容を確認して「承認する」をすればコメントが公開される。ここまで「コメントの手動承認を必須にする」にチェックしている場合。要するに普通のコメントが送信された場合の挙動。

WordPressの処理変更でゴミ箱から登録無しにする

WordPressの在り処/wp-content/themes/使用中テーマ/functions.php (最後にでも追加する)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function custom_comment_form_defaults($args) {
  $args['title_reply'] = '記事へのコメント';
  $args['comment_notes_before'] = '<p class="comment-notes"><span id="email-notes">いただいたコメントは管理人が確認した後に記事の下部(ここ)>に公開されます。<br />コメントスパム対策でコメント内にリンクURLを含めると自動破棄されます。(記録されません)</span></p>';
  return $args;
}
add_filter('comment_form_defaults', 'custom_comment_form_defaults');


function custom_comment_form_default_fields($fields) {
  if(isset($fields['url'])){
    unset($fields['url']);
  }
  $fields['author'] = '<p class="comment-form-author"><label for="author">名前 (公開されるのでテキトーで可)<span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" required="required" /></p>';
  $fields['email'] = '<p class="comment-form-email"><label for="email">メール (メールアドレスは公開されません) <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" required="required" /></p>';
  return $fields;
}
add_filter('comment_form_default_fields', 'custom_comment_form_default_fields');


//コメントスパムは保存せずに破棄する  wp-includes/comment.phpの一部処理をオーバーライドするフィルタ
function bny_pre_comment_approved($approved, $commentdata) {
  if ( wp_check_comment_disallowed_list(
    $commentdata['comment_author'],
    $commentdata['comment_author_email'],
    $commentdata['comment_author_url'],
    $commentdata['comment_content'],
    $commentdata['comment_author_IP'],
    $commentdata['comment_agent']
  ) ) {
    //$approved = 'trash';  //ゴミ箱へ (デフォルト動作)
    wp_die('Thank you for your spam comment.');  //表示だけして保存せず終了
  }
  return $approved;
}
add_filter('pre_comment_approved', 'custom_pre_comment_approved', 1, 2);

1〜17行目はコメント入力欄に表示するメッセージのカスタムです。URLを含むメッセージは登録されずに破棄する旨を人間の読者さんに伝えることは重要です。
この記事のキモは21行目から最後です。

WordPressのコメントスパム対策 2
再び、記事のコメント欄でコメント本文にURL (上の画像では https://example.com/test )を含めて「コメントを送信」する。

WordPressのコメントスパム対策 4
今回は「コメントを送信」直後に(コメントスパムを送信した人のブラウザに)「Thank you for your spam comment」(スパムコメントありがと)という皮肉が表示される。ただし、実際には自動化されたスパム送信システムを使うだろうから、おそらくブラウザは使ってなくてこのメッセージが表示されることはなさそう。

WordPressのコメントスパム対策 5
コメントスパムは登録されずに「無かったこと」になるので「ゴミ箱」にも「承認待ち」にも入らない。

合理的にできました

これで、大量にコメントスパムを付けられてもほぼほぼ何もしなくて済みます。というかコメントスパムが送信されたことすら知らなくて済むでしょう。WordPressのデータベースも汚されません。
毎日数十〜数百届くコメントスパムは皆無になるのでAkismetプラグインは無効化するか無効化後に削除して構いません。ときどき意味不明な文字列が書かれた謎コメントが送信されることがありますが月に数個程度でしょう。この謎コメントはコメント送信可能なブログ(ウェブサイト)を探すボットのようなものかもしれません。無視して良さそうです。

関連記事:

Root化したAndroidでLSPosedモジュールのインストールと使用

魔法使い
©いらすとや.

前回、MagiskでRoot化したAndroidでRoot対応アプリを使用 & LSPosedをインストールでLSPosedのインストールは済んだが、インストールしただけでは何かが出来るようになるものではない。
今回はLSPosedにモジュールをインストールしてそれを使ってみる。

LSPosedのモジュールインストールと使用 1
LSPosedを起動して左下の「ダウンロード」っぽいアイコン、実際は「リポジトリ」をタップする。

LSPosedのモジュールインストールと使用 2
リポジトリが表示される。要するにモジュールのリスト。
一番上の方に中国語のモジュールが並ぶので怪しく思ってしまうが、気にしない。 利用したいモジュールの名前が判っているなら右上の (検索)から。
または、下にスクロールして欲しいモジュールを探す。

LSPosedのモジュールインストールと使用 3
今回は、Disable-FLAG_SECUREというモジュールをインストールすることにした。これはスクリーンショットの取得を禁止しているアプリでスクリーンショットを撮るために利用するモジュール。画像の赤枠の2つ上にもDisable FLAG_SECUREというほぼほぼ同じ名前のモジュールがあるが、今回はDisableの後に - (ハイフン)が付いてる方。
そのインストールしたいモジュールをタップする。

LSPosedのモジュールインストールと使用 4
Disable-FLAG_SECUREの説明が表示される。 説明を確認してから右上のアイコンをタップする。

LSPosedのモジュールインストールと使用 5
ページ内をスクロールしてアプリファイルを探す。この画像では Xposed-Disable-FLAG_SECURE_2.0.0.apk がそれ。
アプリファイルをタップする。

LSPosedのモジュールインストールと使用 6
Google Play外からのダウンロードなので野良アプリとして「有害なファイルの可能性があります」という警告が表示される。
無視して右下の「ダウンロードを続行」をタップ。

LSPosedのモジュールインストールと使用 7
ダンロードが完了したら「開く」をタップする。
この画面は数秒以上放置するとバルーン表示が消えて「開く」をタップできなくなる。その場合はファイラーアプリなどでダウンロードしたファイルをタップして開く。

LSPosedのモジュールインストールと使用 8
インストールの確認が表示されるので「インストール」をタップする。

LSPosedのモジュールインストールと使用 9
スマホメーカーのUIによるかもだがセキュリティーチェックが実行される。終わったら「開く」をタップする。

LSPosedのモジュールインストールと使用 10
LSPosedの「モジュール」の画面でDisable-FLAG_SECUREを選んで表示した画面になる。
このDisable-FLAG_SECUREというモジュールではシステムフレームワークに絡むよう。おそらく「システムフレームワーク」に自動でチェックが付いた状態の筈だが、チェックが付いていないようであれば手動でチェックする。
「モジュールを有効化」のスイッチをオンにする。(このスイッチは自動でオンにはなっていない筈)

Androidシステムを再起動する。

LSPosedのモジュールインストールと使用 11
今回はV POINTアプリ。このアプリはスクリーンショットを撮ろうとするとスクリーンショットを撮れない旨のメッセージが表示されるだけでスクリーンショットを得ることができない。
しかし、Disable-FLAG_SECUREが有効になっていると普通のスクリーンショットの操作上の画像のようにでスクリーンショットを撮影できた。
この際、スクリーンショットを撮れない旨のメッセージは表示されない。
スクリーンショット撮影操作で黒画面が撮影されるようなアプリも正常にスクリーンショットを撮れる筈。

このように、LSPosedのモジュールを使用することで希望の機能を実現できる。

単機能のモジュールの場合、機能の使用が終わったら2つ上の画像ようにLSPosedを開き「モジュール」を選択してモジュールリストから該当するモジュールを選択し、そのモジュールを無効化する。必要なとき以外は有効化しない。何でもかんでも有効化しているとAndroidが再起動を繰り返すなどトラブる可能性がある。セキュリティ的に安全でもなくなるし。
関連記事:

MagiskでRoot化したAndroidでRoot対応アプリを使用 & LSPosedをインストール

魔法使い
©いらすとや.

前回の、XiaomiのスマートフォンをMagiskでRoot化でMagiskをインストールしてAndroidスマホをRoot化できるようにした。
が、Magiskをインストールして有効化しただけではアプリは普通にしか動かないので特に何かできるようになるわけでもない。今回は、Root化で特殊な機能が使えるアプリにスーパーユーザー権限を与える方法、Root化で使えるようになるLSPosedフレームワークのインストールととそのアプリ(モジュール)で特殊なカスタマイズしたりやりたい放題できるようにする方法。

要Rootアプリにスーパーユーザー権限を与える

Google Playからインストールしたアプリや野良アプリにはRoot化で本領を発揮できるものがある。ここでは前回のMagiskのインストールでも紹介したRoot Explorerにスーパーユーザー権限を与える。

MagiskでRootアプリを使う 1
Magiskを有効化した状態でRoot化前提のアプリを起動する。今回はRoot Explorerを起動。Magiskを有効化するまではRoot Explorerを起動しても表示されなかった「スーパーユーザー権限の要求」のポップアップが表示される。「許可」「拒否」の選択が求められる。この記事的にはスーパーユーザー権限を与えたいので「許可」をタップする。基本的にはこれだけ。なお、ポップアップは一定時間で表示が消える。この場合は「拒否」と同様になる。また、間違って「拒否」をタップしてしまうこともある。「拒否」するとその後アプリを起動してもポップアップは出ず拒否扱いで動作する。「許可したかったのに・・」でも大丈夫。(次へ)

MagiskでRootアプリを使う 2
Magiskアプリを起動する。
最下部の「スーパーユーザー」をタップする。

MagiskでRootアプリを使う 3
「スーパーユーザー権限の要求」のポップアップで「拒否」した場合やポップアップを放置して消えてしまった場合、または意図的にアプリのスーパーユーザー権限を剥奪した場合はこの画面のようにアプリの右のスイッチがオフになっている。スイッチをタップしてオンにする。

MagiskでRootアプリを使う 4
アプリ名の右横のスイッチがオンになればそのアプリにスーパーユーザー権限が与えられた状態。通常状態では利用できない機能が利用できる。
なお、アプリにスーパーユーザー権限を与えるのは危険もある。通常状態ではスーパーユーザー権限は与えず、アプリを使う時だけ一時的にスーパーユーザー権限を与え、アプリの利用を終えたならスイッチをオフにしてスーパーユーザー権限を剥奪しておくのがオススメ。ただし、特殊な機能を使える状態で常駐させるようなアプリは、基本的には常時スーパーユーザー権限を与えたままにする。(オフにしない)

このように、Magiskが有効状態でスーパーユーザー権限を必要とするアプリにスーパーユーザー権限を与えたり剥奪するのは簡単。

Magiskモジュールの在り処

以前のMagiskにはモジュールのリポジトリの表示機能とそこからインストールする機能があった。現在は公式のリポジトリ以外の選択肢も利用できるようにするのが目的なのかそれらの機能が省かれている。おかげで簡単にモジュールを選んでインストールするのができなくなってしまったが選択肢は広がったのは間違いない。

Magiskモジュールのインストール 5
Magisk Modules Alternative Repository

Magiskモジュールのインストール 6
Magisk-Modules-Repo

これらのリポジトリからMagiskモジュールを探すのが簡単でしょう。
モジュールのリストから欲しいモジュールがあればクリックしてモジュールのリポジトリを開き「Releases」から最新版をダウンロードしてMagiskでインストールします。
他に、XDAにもMagiskモジュールや情報が多くある。また、有志らが作ったモジュールが彼らのウェブサイトやGitHubに置いてあったりする。

LSPosedフレームワークのインストール

以前はAndroidをRootしたらXposed (その後継のEdXposed)を入れるのが当たり前だったが、現在は(さらに後継の?)LSPosedを入れる。

Magiskモジュールのインストール 7
LSPosedはhttps://github.com/LSPosed/LSPosedにある。
Releasesをタップする。

Magiskモジュールのインストール 8
一番上にLatest(最新)バージョンが表示されるので確認。 Assetsの一番上がそのバージョンの筈なのでファイル名内のバージョンの数字を確認。2つ同じ様なファイルがある筈だが、ファイル名に「zygisk」が含まれている方をタップしてダウンロードする。このZIPファイルは解凍する必要はない。

Magiskモジュールのインストール 9
前回のMagiskインストールでMagiskで「インストール済み」「Zygisk対応」になっている筈。一応確認しておく。
右下の「モジュール」をタップする。

Magiskモジュールのインストール 10
「ストレージからインストール」をタップする。

Magiskモジュールのインストール 11
ダウンロードしたファイル名が表示されているならそれをタップする。
または、「他のアプリでファイルを探す」からファイラーアプリをタップしてそのファイラーアプリでダウンロードしたファイルを選択する。(次へ)

Magiskモジュールのインストール 12
今回は敢えてRoot Explorerでダウンロードしたファイルを見つけてタップした。

Magiskモジュールのインストール 13
LSPosedのインストールが始まる。
ズラズラっと文字が表示される一番が「Done」になればインストール完了。
右下の「再起動」ボタンが押せるようになるのでタップする。

Magiskモジュールのインストール 14
システム再起動後にデスクトップ上に「LSPosed」のアイコンが出来ている。個人的にはデスクトップには極力アイコンを置きたくない派だが、このLSPosedはドロワーにアイコンが出来なくてショートカットを作るための情報が無い。デスクトップに置かれたアイコンを消してしまうと一時的にお手上げになる。
とはいえ、救済策が用意されていて、電話アプリ(ダイヤラ)を起動して「*#*#5776733#*#*」をダイヤルするとLSPosedが開くようになっている。LSPosedが開いた状態で右下の「設定」をタップして下にスクロールし、「ショートカットを作成」をタップデデスクトップにアイコンが作られる。(また、システム再起動でもアイコンが出来るらしい)

Magiskモジュールのインストール 15
LSPosedを開いた。
有効化済みになっている。(Zygisk対応)

これでLSPosedのインストールが完了。
次回はLSPosedのモジュールをインストールしてRoot化のありがたさを得られるようにする。

関連記事:

Up