Page 1
メールアドレス vs 俺たち
Our stand against the challenges posed by E-mail addresses
pixiv Inc.
USAMI Kenta
2024-01-12 Sapporo Community Plaza
PHPカンファレンス北海道2024 前夜祭
公開日:
by USAMI Kenta@tadsan
メールアドレス vs 俺たち
Our stand against the challenges posed by E-mail addresses
pixiv Inc.
USAMI Kenta
2024-01-12 Sapporo Community Plaza
PHPカンファレンス北海道2024 前夜祭
お前誰よ
今回のお題
出典: Wikipedia: ID (2023-07-09T09:38:16版)
出典: Wikipedia: デジタルアイデンティティ ( 2023-10-20T14:01:45版)
今回はIDとは何か
(本質)
の話には深入りしません
おことわり
発表者は現時点において
現職のID設計判断や実装に
関わっていません!
ID、Auth、アカウント基盤など
AAA(Authentication,
Authorization, Accounting)
は高度な専門技術領域
発表のねらい
今回のゴール
ゴールではないこと
今回は専門職ではない 我々が実装するための
お話をします
初心者の方も
怖がらずに
お聞きください
さて
難しいことは置いておいて
ユーザーからメールアドレスを
収集したい(せざるを得ない)
ことは現代でも多い
メールアドレスを何に使うか
メールアドレスを何に使うか
個人的感情は
おいといて
DBに入れるだけだし
フレームワークとか要らん
ですよね?
[要出典]
すごくシンプルな
ログインシステムを 作っていきましょう
[要件1]
変な形式の文字列が
登録できないこと
aaa@example,com
example.com
ググったら最適解が 出てくる良い時代…
良くなかった時代とは
どういうこと?
そもそも
メールアドレスとは
tadsan@pixiv.com
"tadsan"@pixiv.com
<tadsan@pixiv.com>
USAMI Kenta <tadsan@pixiv.com>
どれも「メールアドレス」
出典: Wikipedia: メールアドレス (2023-11-07T03:00:31版)
メールアドレスとは
出典: Wikipedia: メールアドレス (2023-11-07T03:00:31版)
一般的なメールアドレス
を収集する用途で addr-spec以外が
必要になることはない
基本的にaddr-spec だけを相手にすれば
いいとわかった
改めて
ドメイン名
ローカルパート
tadsan@pixiv.com
ローカルパートの制約
RFC違反メールアドレス
" "
だが、残念なことに受信側のメールサービスが対応している必要がある
PHPでは
これを使えば
安全!
…ここまでに説明した
範囲では
[要件2]
存在しないドメインの メールアドレス登録を
弾きたい
a@b.c
filter_var('a@b.c',
FILTER_VALIDATE_EMAIL)
filter_var('a@b.c',
FILTER_VALIDATE_EMAIL)
// => "a@b.c"
定石:
入力されたアドレスに 送信してメール内の コードを入力させる
実メール送る前に
どうしても確認したい
のだとしましょう
DNSをチェックしよう
この方法で
良いといえば良い だめといえばだめ
(非常に言葉を濁す)
メールはどうやって届くのか
DNSではなくSMTP でチェックする別解も
あるが…
(僕は運用経験がない
ので言葉を濁す)
ついでに
メールアドレス
IPアドレス
a@0.0.0.0
filter_var('a@0.0.0.0',
FILTER_VALIDATE_EMAIL)
filter_var('a@0.0.0.0',
FILTER_VALIDATE_EMAIL)
// => "a@0.0.0.0"
ドメインがIP
[要件3]
メールアドレスの
重複登録を弾きたい!
DBに登録
ユニークキー制約
大勝利
かと思いましたか?
ローカルパートの制約
a@example.com
A@example.com
同一かもしれないし
別人かもしれない
unicode_ciは 大文字小文字を
同一視する
utf8mb4_binで
厳密チェックすれば
いいのか?
もっとひどい穴を 簡単に作れるので binで比較はやめた
方がいいと思う
Laravelは全部小文字の
アドレスのみ許可
(これが無難)
この問題を騙り尽すには 15分枠はあまりに短い…
Gmailエイリアス沼
ご静聴ありがとう
ございました
