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