LoginSignup
3
5

More than 1 year has passed since last update.

【Laravel】「email」のバリデーションルールの注意

Posted at

初めに

Laravelではデフォルトで様々なバリデーションルールを準備してくれており、生PHPと比べてかなり簡単にバリデーションを設定することができます。
しかし、デフォルトのものには実は注意が必要と言う事をお話しして行きます。

その中で、今回は 『email』のバリデーションルールについて紹介します。

問題点

デフォルトでは、emailの形式ユーザー名(メールアカウント)@ドメイン名でなければバリデーションエラーを出力してくれます。

App\Http\Controllers\Auth\RegisterController.php
return Validator::make(
            $data,
            [
                'name' => ['required', 'string', 'max:255'],
                'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
                'password' => ['required', 'string', 'min:3', 'confirmed']
            ]

しかし....
以下のような形式だとバリデーションエラーとはならず登録処理が実行されてしまいます。

これではドメインが存在しないアドレスが気軽に登録されてしまう。
それどころか、この状態でサービスをもしリリースしたらとんでもないことになる...

emailのバリデーションの種類

公式ドキュメントによると、5種類あります。

  • rfc: RFCValidation
  • strict: NoRFCWarningsValidation
  • dns: DNSCheckValidation
  • spoof: SpoofCheckValidation
  • filter: FilterEmailValidation

詳細

バリデーションスタイル 内容
rfc RFCと呼ばれるインターネットの標準仕様に合っているかをチェックするバリデーション
strict email:rfcをより厳格にしてもので「エラーだけでなく、警告があってもダメ」なバリデーション
dns DNSにそのメールアドレスのドメインが存在するかをチェックするバリデーション
spoof なりすましのメールアドレスは拒否するバリデーション
filter PHP関数のfilter_var()を使ったメールアドレスのチェック

バリデーションの書き方

問題となるメールアドレスを通さないだけであれば、dnsのみの設定でも対応はできますが、その他の対策ができていないため併用して書きます。

以下は、strict(RFCに違反するアドレスがはじかれる)、dns(ドメインが有効でないアドレスがはじかれる)、spoof(なりすましメールもはじかれる)の3つを適用します。

App\Http\Controllers\Auth\RegisterController.php
return Validator::make(
            $data,
            [
                'name' => ['required', 'string', 'max:255'],
                 //emailに新しいバリデーションを追加
                'email' => ['required', 'string', 'email:strict,dns,spoof', 'max:255', 'unique:users'],
                'password' => ['required', 'string', 'min:3', 'confirmed']
            ]

これでemailのバリデーション対策ができます。

最後に

Laravelの『email』のバリデーションルールに注意が必要というお話をしてきました!

Laravelを触り始めて、色んな人のGitHubのコードを閲覧してきましたが、意外にもこのルールについて知らない人多いんではないでしょうか?

今回の内容だけでなく、便利なメソッドだからといって使うと思わぬ落とし穴があるものは他にもありそうです、、

3
5
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
3
5