1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

個人ブログのスパム対策に関して(Rails)

Posted at

概要

先日、Railsで開発した個人ブログを公開しました。

その公開に伴いGoogleのサーチコンソールに登録したは良いものの、問い合わせフォームに、RichardcenceさんやGeorgewetさんなど知らない外国人から「登録したら〇〇ドルもらえる!」というスパムが大量に届いたため、その対策として行ったことを簡単にまとめます。

スクリーンショット 2021-11-19 14.57.19.png

1. URLのバリデーション

早急にbot等でのスパムメールを送れないようにするため、まず初めに問い合わせフォームの本文にURLのバリデーションを設定しました。

model.rb

## URLの正規表現を生成して定数へ
  VARID_URL_REGEX = /\A#{URI::DEFAULT_PARSER.make_regexp(%w(http https))}\z/

## 上記の正規表現が含まれていたらNG
  validates :message, presence: true,
                      format: { without: VARID_URL_REGEX }

参考サイト1
参考サイト2

このバリデーションだけで恐らく大半のスパムbotは送れなくなると思います。(自身のサイトで企業案件などを募集している方はURLが入力できなくなるのでご注意ください。)

2. googleのreCAPTCHA

加えて自分の場合は、botからの送信対策として、googleのreCAPTCHAを導入しました。

※reCAPTCHAとは、ユーザー登録等で、信号とかバスとか選択させられたり、自分がロボットか否か確認させられたりするやつです。参考:WHAT IS RECAPTCHA?

実装はpikawakaさんのサイトを参考に行いました。
今回の実装の注意点として、

  • シークレットキーとサイトキーの発行

自分のサイトの場合、ユーザーからの問い合わせを円滑にするため、v2非表示(サイトの右下に利用規約が表示されるタイプです)を利用しました。その際、サイトキーとシークレットキーが発行されますが、非表示とチェックボックスを切り替える際にキーを発行し直す必要があります。

  • 環境変数の設定

上記で発行した各キーを読み込むために、.envファイルもしくはcredentialへの記載が必要です。
自分はcredentialを用いて、config/initializers下に以下のコードを記載しました。
※設定の詳細は割愛しますが、開発/本番環境で用いるcredentials.ymlも編集しています。

recaptcha.rb

Recaptcha.configure do |config|
  config.site_key = Rails.application.credentials.recaptcha[:site_key]
  config.secret_key = Rails.application.credentials.recaptcha[:secret_key]
end

  • submitボタンをreCAPTCHAの非表示用のタグに変更

非表示のreCAPTCHAを用いる場合は、通常のform_withなどで用いるsubmitボタンのタグをinvisible_recaptcha_tagsに変更する必要があります。

参考:recapthca gemのREADME

sample.html.erb

 <%= invisible_recaptcha_tags({ text: "送信", class: "btn btn-success w-25" }) %>

以上を行うと、フォームの送信時にbotかどうか、確認してくれるようになります。

スクリーンショット 2021-11-29 23.55.43.png

まとめ

上記を行ったことで、1日最大で300件近く届いていたスパムメールが0になりました!
(サイト自体の訪問者も少ないので、問い合わせ自体が0になりました…)

スパムで困っている方の少しでも力になれれば幸いです。
また、編集リクエストなどあれば、気軽にコメント/リクエストください。

ここまでお読みいただきありがとうございました。

完全な宣伝です

以下の個人ブログを運営しています。

サイトに関しての意見や共通の趣味がある方からの連絡、その他諸々大歓迎です。(スパムはご遠慮ください笑)
ぜひ気軽にサイトまでお越しください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?