Laravelでスパム登録を遮断する方法

Laravelセキュリティ

スパム登録に悩まされている方のための対策、お伝えします。

実はわたしも、あるWebアプリを運用中にスパム登録に悩まされていました。メール認証を搭載していますが、本登録まで行わない登録が増えていたのです。

スパム登録を減らすため最初はマイルドな方法を実施しました。ですがそれでは効果が少なかったので、どんどん強めのブロックを行っていきました。

こんな経験を踏まえて、Laravelでのスパム登録のブロック方法ご紹介しますね。

スパム登録撲滅しましょう♪現在悩んでいる方の参考になれば幸いです。

まずは二段階認証を搭載

スパム登録のブロックの前にまずは二段階認証を搭載しておきましょう。

メールとパスワードだけで登録してしまえるサイトだと、簡単に不正なアクセス元にログインされてしまいます。なので二段階認証を搭載しておくことをおすすめします。

メール認証であれば、Laravelのもともとの機能を利用して比較的簡単に搭載できますよ。下記記事にてメール認証方法解説しています。

少し古いですが、基本の流れは同じです。

IPアドレスも取得しておきます

次にアクセスした人のIPアドレスを取得できるようにしておきます。Laravelの場合は、usersテーブルに、IPアドレスをいれるカラムを作っておきます。

さらに、ユーザー登録時のコントローラー側の処理で、次のように、IPアドレスを登録するためのコードをいれます。

【ユーザー登録用コード追加例】

また、規約等の該当箇所に、下記のような文書を追加しておきましょう。

【IPアドレス利用についての文言例】

IPアドレスの使用について: 当社は、サービスの改善とセキュリティの強化のため、お客様のIPアドレスを収集・利用します。この情報は法的要件に基づき、適切に管理されます。

このあたりの文書は、既存のWebアプリをお手本にさせてもらうと作りやすいですよ。

IPアドレスのあやしさ度チェック!

IPアドレスを取得したことで、不正アクセス元のデータが取れます。データが取得できたら、次のようなサイトで「あやしさ度チェック」が可能になります。

スパム登録を分析して、どのようにアクセスをとめるか対策を考えていきましょう。

AbuseIPDB

あやしげ、というか悪いIPアドレスを報告するサイト。ここで、ブラック度をチェックできます。

IPアドレス住所検索

IPアドレスをもとに住所を検索できるサイトです。

一定回数以上の登録をブロック

ここからスパム登録のブロック方法についてお伝えします。

まずはメール認証をせずに、同じメールアドレスやIPアドレスで何回も登録してくるユーザーがいる場合の対策をご紹介します。

こういったスパム登録をとめるには、まずはユーザーテーブルにattemptカラムを追加しておきます。この部分のコードは割愛します。

次にユーザー登録フォームにコードを追加し、ユーザー登録時に数字が入るようにします。さらに、ユーザー登録時には、attemptカラムの数字が一定以上であれば登録できないようにします。

参考コードはこちら。

【ユーザー登録用コード追加例】

この方法のデメリットは、「うっかり間違えて何度も登録しちゃった」ユーザーもブロックする可能性があることです。

なので、何回以上間違えたユーザーをブロックするか、数字の指定も大事です。

特定のIPアドレスをブロック

確実に「あやしい」IPアドレスをしぼれたら、IPアドレスごとにブロックするのが効果的。Laravelでルールを作ってしまうとやりやすいです。

まずは、下記コマンドで新たにルールを作成します。ルールの名前は、ここでは仮にLimitRegistrationAttemptsとしておきます。

【ルール作成コマンド】

作成したLimitRegistrationAttemptsルールには、次のようにコードをいれます。

【ルール記入例】

このLimitRegistrationAttemptsルールをユーザー登録時のバリデーションに追加します。

【バリデーションにルール追加例】

国ごとにブロック

スパム登録を行うIPアドレスを調べた結果、特定の国からのIPアドレスが多かった場合には、国ごとブロックが有効です。

torann/geoipなどのライブラリを使うと、IPアドレスに基づいて国を特定する処理を手軽に実装できます。

torann/geoipの使い方サイトはこちら

わたしの場合は、今回は、国ごとブロックが一番効果がありました。

ただ国ごとブロックを行うと、特定の市場からのユーザーを締め出すことになりかねません。グローバル展開のWebアプリの場合は、慎重に検討する必要があります。

おまけ:問題のあるメールアドレスを撃退

本記事をXに投稿したところ、「こんな方法もあるよ」と有益な情報をコメントで頂きました。こちらも追加でご紹介します。

Laravelでは、ライブラリを使っておかしなメールアドレスを簡単に撃退する方法もあります。下記ライブラリをインストールします。

ユーザー登録に、 'email:rfc,dns,spoof' のようにバリデーションルールを追加します。

このルールを追加することで、下記のバリデーションルールを追加できます。

  • rfc: メールアドレスがRFC標準に準拠しているかを検証します。
  • dns: メールアドレスのドメインが存在するかをDNSレコードをチェックして検証します。
  • spoof: メールアドレスがなりすましでないかを検証します。

具体的には、taro@testなどのメールアドレスは、dnsチェックによってはじいてくれます。

ただわたしの場合は、あまり効果がありませんでした。正しい形式のメールアドレスや存在するドメインを使って登録された場合は防御しきれません。

スパム登録されたメールアドレスが、上記のバリデーションルールで撃退できそうな場合は、お試しください。

さいごに

スパム登録についてお伝えしました。実際にブロックする方法を行う前に、まずは「スパム登録の分析」をしっかり行ってから対策を考えるのがポイントです。

なお今回は割愛しましたが、他にも、reCAPTCHAを使う、短時間での集中登録をブロックするといった方法もあります。

特にひとつに絞る必要はないので、あなたのWebアプリにあった対策を組み合わせて、スパム登録をがっつりとめていきましょう。

Laravelセキュリティ

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

【AWS関連・Webアプリ開発・生成AIのAPI活用のご相談承ってます】
お気軽にお声がけください。
御社にとって、最善の方法をご一緒に考えてまいります。
Zoomミーティング実施中。サンプルアプリご利用可能です。

お問合せフォーム

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

最新版Laravel11用のサポートガイドご用意しています。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる
Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました