ログインの実装
SMSとメールを認証要素として使用する
- 電話番号はユーザー認証には十分ではありません。携帯電話ネットワークで使用されているSS7電話ルーティングシステムには脆弱性が確認されているため、認証要素としては推奨されません。ソーシャルエンジニアリングの利用からSIMカードの交換やSS7ネットワークへのアクセスの購入に至るまで、利用可能な攻撃ベクターは多く存在します。
- メールアドレスの所有は、ユーザー認証には十分ではありません(例として、エイリアス、転送、1つのアカウントに複数のユーザーがいる状態などが挙げられます)。メールプロバイダーのセキュリティ慣行はそれぞれ異なり、ユーザーの本人確認を求めないプロバイダーもあります。SMTPは非常に古いプロトコルであり、多くのプロバイダーは依然としてSMTPトラフィックを暗号化せずにルーティングしているため、横取り攻撃の可能性が高まります。
フィッシング攻撃を防止する
- ユーザーが悪意のあるメールまたはウェブサイトのリンクをクリックする。
- ユーザーが攻撃者の偽サイトにアクセスし、認証のために電話番号の入力を促される。
- ユーザーが電話番号を入力し、攻撃者が正規のアプリケーションにその電話番号を入力する。
- 正規のアプリケーションがユーザーにSMSを送信する。
- ユーザーは、攻撃者のウェブサイトでワンタイムコードを入力する。
- それによって攻撃者は正規のウェブサイトにログインできる。
総当たり攻撃を防止する
- 発行された最新のワンタイムコード(またはリンク)のみ許可されます。最新のものが発行されると、それ以外は無効になります。最新のものも、一度使用すると無効になります。
- ワンタイムコードの入力は、1つにつき3回までしか失敗できません。3回失敗すると、新しいコードを要求する必要があります。
- 発行されたワンタイムコードは、有効期限が切れるまで3分間(デフォルト)有効となります。
- パスワードレスユーザーが管理上ブロックされている場合、Auth0はそのユーザーがブロック解除されるまで、SMSまたはメールでOTPコードを送信しません。この動作によって、SMSおよびメールプロバイダーが不要な要求を受信しないように保護します。
ユーザー列挙攻撃を防止する
アカウントのリンク
レート制限目的でauth0-forwarded-forヘッダーを設定する
/passwordless/startエンドポイントは、IPアドレスごとに一時間に50要求のレート制限があります。サーバー側からAPIを呼び出す場合、バックエンドのIPがこのレート制限にすぐに達する可能性があります。この問題の対処方法については、「パスワードレスAPIの使用」のパスワードレスエンドポイントのレート制限のセクションをご覧ください。