以前、このブログのコメント欄を復活させた際に、簡単なスパム対策を施していたのですが、違ったタイプのスパムコメントが未だに投稿されていたため、もう一段階スパム対策を施しました。
***
前回行ったスパム対策は、海外スパムボットからのコメントを受け付けないために、本文に「ひらがな」が含まれていないコメントは禁止するものです。
この対策で海外スパムは防げるようになったのですが、日本語のスパムコメントがたまに投稿される問題が残っていたのです。
今回は、RailsのModelのvalidates機能を使って、特定の文字列を含む投稿を禁止する機能を追加しました。
validates - リファレンス - - Railsドキュメント
最初は exclusion のパラメータを使って試してみましたが、exclusionは指定した文字列に完全一致しないといけず、「user」と指定しても「users」は通ってしまうというものでした。
最終的には、 format のパラメータを用い、正規表現で特定の文字列を指定して、その文字列が含まれていたら投稿させないようにするようにしました。
対策を施してから2週間ほど経ちますが、いまのところ以前のようなスパムコメントは付いていないので、とりあえずは上手いこと機能しているようです。