ZodのEmailバリデーションでとくに問題ないメールアドレスなのにエラーっていわれてしまった。
Zodのバージョンは [email protected]
なので 2023/08/01時点で最新かと思います。
そのようなメールアドレスが問題なのか?
上記のメールアドレスにおいて、ドメイン部のハイフンがエラーになると怒らました。
どうやら c.email.polidog.jp
もしくは em-ail.polidog.jp
なら問題ないようです。
問題はなにか?
メールアドレス用の正規表現に問題があるようです。
https://github.com/colinhacks/zod/blob/22f3cc6ed52a28c984a0319a1a03e1af244cee02/src/types.ts#L553
どの用に対処するべきか?
じつはmasterブランチではこの問題は修正されています。
https://github.com/colinhacks/zod/blob/78a409012a4dc34a455f5c4a7e028ca47c921e1b/src/types.ts#L560
自分の場合は email()
を使わずに regex()
でメールアドレスのバリデーションをするように修正しました。
そのうち新しいバージョンがリリースされたら再度 email()
を使うと思っています。
|
|
追記
上記の正規表現にはReDoS脆弱性があると @wwwdddw1 さんから教えていただきました!!!
"ReDoS check"で検索して出てくるサイトでチェックできます。
— masa5555 (@_masa5555) October 5, 2023
特に、@の前の部分を以下のように変更すれば同じことができるかと思います。
[A-Z0-9_+-](\.[A-Z0-9_+-])*@
繰り返しの括弧の中に二つ以上の繰り返し表現を入れないでください。
こちらzod本体でも脆弱性の指摘、及び修正が入っています。
https://github.com/colinhacks/zod/issues/2609
最新のコードは修正されているようです。
https://github.com/colinhacks/zod/pull/2824
https://github.com/colinhacks/zod/blob/master/src/types.ts#L567
ということで基本zodは最新のバージョンを使うのが望ましいかと思います。
ただし何かしらの理由でアップデートできない場合は下記の正規表現で対応できるかと思います。
|
|