2008年1月30日水曜日

 

正しいメールアドレスのチェック方法

正しいメールアドレスのチェック方法 / yohgaki's blog

正規表現でメールアドレスをチェックするのは面倒です。しかも、RFCを守らない大手企業もあり、正規表現でチェックするのは諦めるのが妥当でしょう。
記入されたメールアドレスが正しいかチェックする手順
  1. @でスプリットする
  2. 配列要素が2つかチェック。NGはエラー
  3. 1つ目の要素(ユーザ名部分)および2つ目の要素(ドメイン部分)に空白や制御文字、非ASCII文字が含まれていないかチェック。NGはエラー
  4. 2つ目の要素(ドメイン部分)がDNSのMXレコードを持つかチェック。NGはエラー
PHPのmail, mb_send_mail関数は関数レベルでメールヘッダインジェクション対策が施されているので、CR,LFが混じっていてもインジェクション攻撃に脆弱になりません。しかし、他の環境ではメールヘッダインジェクションが可能になる場合があります。最低限、CR、LFだけはチェックし、含まれる場合はセキュリティ上のエラーとして処理(攻撃が行われたとアラートを発生させる等)しなければなりません。
メール送信後の認証処理
  1. 認証URLを含むメールを送信
  2. 認証URLがリクエストされる
  3. 認証用の鍵が一致するかチェック。不一致はNG

メールアドレス認証等に使う鍵は十分なエントロピーを持ったデータのハッシュ値(SHA1など) 、PHPではuniqid()関数なんかを利用すると良いらしい。


$token = sha1('SOME_RANDOM_PREFIX' . uniqid(rand(), true));

迷惑メール防止のため一定時間は同じメールアドレスに対して認証用のメールを繰り返し送信しないようにする。

あとで考える。

関連
Web屋のネタ帳
Webアプリでメールアドレスを確認する「正しい」方法
ドコモもauもいいかげんにメールアドレス設定の仕様を直せ。

コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google