bbpress – インクループ株式会社|神奈川県相模原市 ホームページ制作、WEBマーケティング https://incloop.com インクループ株式会社は、お客様の顧客獲得をマーケティングを活用して支援する会社です。 データ分析、市場調査に基づく企画立案、コンテンツ制作、運用を通じてお客様の目標を実現します。 Thu, 19 Nov 2020 00:59:16 +0000 ja hourly 1 https://wordpress.org/?v=4.9.19 bbpressに大量スパムが!対策プラグインとスパム投稿の一括削除について https://incloop.com/bbpress%e3%81%ab%e5%a4%a7%e9%87%8f%e3%82%b9%e3%83%91%e3%83%a0/ https://incloop.com/bbpress%e3%81%ab%e5%a4%a7%e9%87%8f%e3%82%b9%e3%83%91%e3%83%a0/#respond Wed, 17 Aug 2016 00:09:39 +0000 https://incloop.com/?p=7403 bbpressに大量スパム!その対処方法とスパム投稿の削除

bbpressを使用して設置した掲示板に大量スパム お盆の連休明けにメールチェックをしたらありえない下図の大量 […]]]>
bbpressに大量スパム!その対処方法とスパム投稿の削除

bbpressを使用して設置した掲示板に大量スパム

お盆の連休明けにメールチェックをしたらありえない下図の大量メールが届いており、おかしい!ということで、調査をしてみたところ、bbPressで設置したフォーラムに1万件以上のスパム投稿がなされておりました。

大量スパム

これはヤバいでしょ。ということで、スパム対策と大量に届いてしまったスパム投稿の削除について書いてみます。

スパム対策にはプラグイン「bbPress Antispam」が便利です。

インストールして、有効化するだけで、ぴたりとスパム投稿が無くなりました。
こちらは、普通にプラグインを追加して有効かするだけですので、詳細は別の機会に譲ります。

さて、問題は1万件以上のスパム投稿の削除です。1件ずつ削除するのは嫌だー。。。ということで、データベースを直接いじることにしました。

スパム投稿の削除① データベースのバックアップ

phpMyAdminなどで、データベースをバックアップしておきましょう。

スパム投稿の削除② wp_postmetaのスパム関連レコードを削除

スパム投稿は、phpMyAdminでデータベースを直接更新して削除しました。

テーブルのレコード数を見ると、「wp_postmeta」と「wp_posts」のレコード数が明らかに多いので、ここにスパムレコードが紛れていることになります。

テーブル一覧

wp_postmetaテーブルの情報だけでは、どのレコードがスパムなのかは判断できません。

wp_postmetaテーブルの内容

wp_postmetaとwp_postsを連結し、post_contentの値がすべて英文ならスパムと判定して、スパム行だけを表示するSQLを実行してみました。
また、7月1日以降にスパムが来ているため、日付を7月1日以降とし、フォーラム関係に絞りたかったので、guid列に”forum”という文字列を含むレコードのみ抽出しております。

実行したSQL文

select *
    FROM wp_postmeta AS postmeta
    INNER JOIN wp_posts AS posts ON postmeta.post_id = posts.ID
    WHERE (posts.post_date > '2016-07-01') and (LENGTH(posts.post_content)=CHARACTER_LENGTH(posts.post_content)) and
(posts.post_content <> '') and
(guid like '%forum%')

実行後の結果

ここに表示されたレコードはすべてスパムとみなして、全部削除していきます。

SQL実行後の結果画面

削除するSQL文は以下を参照ください。

実行したSQL文

先ほどのSQL文の1行目「SELECT *」を「DELETE postmeta」に変えただけです。

DELETE postmeta
    FROM wp_postmeta AS postmeta
    INNER JOIN wp_posts AS posts ON postmeta.post_id = posts.ID
    WHERE (posts.post_date > '2016-07-01') and (LENGTH(posts.post_content)=CHARACTER_LENGTH(posts.post_content)) and
(posts.post_content <> '') and
(guid like '%forum%')

このSQL文を実行することで、wp_postmetaテーブルからスパム関連レコードが削除されました。

スパム投稿の削除③ wp_postsのスパム関連レコードを削除

wp_postsテーブルのスパム関連レコードも削除していきます。
次のSQL文を実行します。

DELETE FROM wp_posts
FROM wp_posts
WHERE  (post_date > '2016-07-01') and (LENGTH(post_content)=CHARACTER_LENGTH(post_content)) and
(post_content <> '') and
(guid like '%forum%')

情報の整理 wp_postmetaテーブルの調整

上記SQLを実行すると、ほとんどのスパム行は消え去ります。
10件だけ残ってしまいましたが・・・(全角文字が本文内に含まれているスパム投稿です)
これら数も少ないので、後ほど手動で削除すればいいですね。

ところで、気になることが。
下図の様に、投稿数が依然として13,643件となっております。

気になる現象

ということで、ここも手動で修正してしまいましょう。

次のSQL文を実行します。WHERE句の条件が13643ではなく13642である理由は、投稿数は最初のトピック投稿1件を含んだ数ですので、返信数は13642であるためです。

SELECT * FROM `wp_postmeta` WHERE meta_value = 13642

クエリの結果は次の画面です。

クエリの結果

各行の鉛筆のアイコンをクリックして、手動で正しい数に直してしまいます。今回は返信数は12件でしたので、13642を12に変更しました。

これで大量スパムを一気に削除することができました。
参考にされる方は自己責任でお願いいたします。また、必ずデータベースのバックアップも取得しておいてください。

この記事であなたの課題を解決することができましたか?

疑問点があったり、解決できなかったことがありましたら、お気軽にご相談してください。

]]>
https://incloop.com/bbpress%e3%81%ab%e5%a4%a7%e9%87%8f%e3%82%b9%e3%83%91%e3%83%a0/feed/ 0