ログインの実装
SMS とメールアドレスを認証要素として使用する
- 電話番号だけでは、ユーザー認証には十分ではありません。携帯電話ネットワークで使用される SS7 電話ルーティングシステムには、確認済みの脆弱性があります。そのため、認証要素としては推奨されていません。攻撃経路は数多く存在し、ソーシャルエンジニアリングの悪用から、SIM カードの差し替え、SS7 ネットワークへのアクセス権の購入まで多岐にわたります。
- メールアドレスを保有しているだけでは、ユーザー認証には十分ではありません (エイリアス、転送、1 つのアカウントを複数のユーザーで共有しているケースなどがその例です) 。メールプロバイダーによってセキュリティ対策は異なり、ユーザーの本人確認をまったく要求しないものもあります。SMTP は非常に古いプロトコルであり、多くのプロバイダーでは現在でも SMTP トラフィックが暗号化されずにルーティングされているため、傍受攻撃を受ける可能性が高まります。
フィッシング攻撃を防ぐ
- ユーザーが、悪意のあるメールや Web サイト内のリンクをクリックします。
- ユーザーは攻撃者が用意した偽サイトに誘導され、そこで認証のために電話番号の入力を求められます。
- ユーザーが電話番号を入力すると、攻撃者は同じ電話番号を正規のアプリケーションに入力します。
- 正規のアプリケーションがユーザーに SMS を送信します。
- ユーザーがワンタイムコードを攻撃者の Web サイトに入力します。
- すると、攻撃者は正規の Web サイトにログインできるようになります。
ブルートフォース攻撃を防ぐ
- 発行されたワンタイムコード (またはリンク) のうち、受け付けられるのは最新のものだけです。新しいコードが発行されると、それ以前のものはすべて無効になります。最新のコードも、一度使用されると無効になります。
- 1 つのワンタイムコードに対して許可される入力失敗は 3 回までです。これを超えた場合は、新しいコードをリクエストする必要があります。
- 発行されたワンタイムコードは、期限切れになるまで 3 分間 (デフォルト) 有効です。
- パスワードレスのユーザーが管理者によってブロックされている場合、ユーザーのブロックが解除されるまで、Auth0 は SMS またはメールで OTP コードを送信しません。この動作により、SMS プロバイダーやメールプロバイダーに不要なリクエストが送られるのを防ぎます。
ユーザー列挙攻撃を防ぐ
アカウントをリンクする
レート制限対応のために auth0-forwarded-for ヘッダーを設定する
/passwordless/start エンドポイントには、IP アドレスごとに 1 時間あたり 50 リクエストのレート制限があります。サーバーサイドから API を呼び出す場合、バックエンドの IP アドレスがこのレート制限に達しやすくなります。この問題への対処方法については、Using Passwordless APIs の「Rate Limiting in Passwordless Endpoints」セクションを参照してください。