Web」カテゴリーアーカイブ

インターネット全般に関するカテゴリーです。

WordPressのスパム対策として投稿者のURLをチェックする方法

WordPressを使っていると日常的にスパムコメントが送信されてきます。
そして、そのほとんどはサイト(コメント投稿者のURL)に何らかのURLが入力されています。

これを逆手に取って、サイト(コメント投稿者のURL)欄にURLが入力されていればブロックするというfancyなスパム対策を考えてみました。

※通常はCaptchaプラグインとかを使うのがおすすめですが、いろいろな物を導入したくないという場合用です。

手順

導入は手順簡単です。
functions.phpあたりに以下の内容を追加してください。

add_filter( 'pre_comment_approved', 'example_filter_handler', 99, 2 );

function example_filter_handler( $approved, $commentdata )
{
  if ( $commentdata['comment_author_url'] != "" ) {
    return new WP_Error();                                                                      
  }
  return $approved;                                                                             
}  

return new WP_Error();の部分をreturn 'spam';とすればスパムフォルダに、return 'trash';とすればごみ箱フォルダに分類することもできます。

一般のコメント投稿者向けに注意書き

スパムでない場合でもURL付きコメントを送信される場合もありますので、このfilterを導入する場合はひとこと注意書きを付けておいた方が無難かと思います。

もしくは、スタイルシートでURL欄を消してしまってもいいかと思います。

.comment-form-url { display: none }

リンク

pre_comment_approved | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/pre_comment_approved/

.htaccessで特定ボットのアクセスを拒否する書き方

最近、「SemrushBot」「Linespider」「BLEXBot」あたりのボットが活発に活動しているようで、Webサーバーに大量のログが残っていました。検索エンジン関係であればボットのアクセスも必要経費と見なせますが、SEO系ボットによるアクセスはサーバーの負荷になるだけなので、余り嬉しくありません。

ということで、特定のボットによるアクセスを拒否したい場合は.htaccessに以下の内容を追加してみると良いと思います。注)

SetEnvIf User-agent "SemrushBot" BadBot
SetEnvIf User-agent "Linespider" BadBot
SetEnvIf User-agent "BLEXBot" BadBot
Deny from env=BadBot

robots.txt

User-agent: SemrushBot
Disallow: /

User-agent: Linespider
Disallow: /

User-agent: BLEXBot
Disallow: /

のようにする方法もありますが、robots.txtを見ないボットもあり一々調べるのも面倒ですから、.htaccessが使えるサーバーであれあば.htaccessで拒否する方が望ましいと思います。


注) SemrushBot、Linespiderなどの文字列はアクセスログからユーザーエージェントを調べてください。(ユーザーエージェントの一部に該当文字列が含まれていれば拒否する設定になっています。)

Bingbotのクローリングを抑制してもらう設定

Webサイトのログを見ていると、Bingbotが短時間に大量のアクセスをしていることが分かり、サーバーの負荷になっているようだったのでrotbots.txtで対策してみました。

robots.txtに追加した設定は以下のような感じです。

User-agent: Bingbot
Crawl-delay: 30

Crawl-delayを追加すると、指定した秒数を空けてアクセスしてくれるようになるみたいです。今回の場合は30秒に1回以下の頻度でアクセスされることになります。(設定できる値は1から30まで)


.htaccessDenyしたくはないけれど、大量のアクセスは気になるという場合に便利なCrawl-delayですが、現状ではBingbot以外ではほぼ使えない状態みたいです。