これは自由回答の質問のように聞こえるかもしれませんが、私のチャンスを利用して、コミュニティの他のメンバーがこの問題を処理する方法があるかどうかを理解したいと思います。
ユーザーが自分の電話番号を使用してサインアップできるアプリがあるとします。
アプリプラットフォーム
アプリフロー
/register
APIを呼び出すとします。リスク:これで、すべてのアウトバウンドSMSに関連する財務コストが発生します。
予防的/対処的緩和策
問題
そのような状況で、リスクからどのように保護するか、またはそれを計画し、準備することができますか?
UXで許可されている場合は、まずユーザーにメールアドレスに基づいてアカウントを作成するように要求できます。アドレスが確認されたら、電話番号の追加を許可してから、通常の方法で確認できます。
正当なユーザーはすでにメールアドレスを持っている可能性が高いため、設定は簡単です。ただし、攻撃者は試行ごとに新しい機能的なメールボックス(またはエイリアス)を作成する必要があります。レート/マックスでメールドメインによる電話の確認を制限することで、簡単に自動化できないことを確認できます。無料のメールサービスは、通常、アカウントの自動作成をすでに阻止しています。阻止しないものはブラックリストに登録できます。
たとえば、オンボーディング中に同様に使用できるユーザー操作を必要としないCAPTCHAがあります。 https://developers.google.com/recaptcha/docs/invisible
残念ながら、OTPなしで電話番号を取得する確実な方法はありません。ただし、Android電話のdeviceID()を取得できます。これにより、有効なIMEI番号が得られます。最初に、この番号をサーバーのサーバーで確認し、何か怪しいものがないか確認してください。
他のデータを匿名で使用することもできます。たとえば、アプリケーションでREAD_CONTACTSまたはREAD_PROFILE権限を使用している場合、そこのデータを使用して、偽のユーザーを特定できます。 (たとえば、電話にはスターターアプリしかなく、IMEIは同じですが、異なるSMS番号を送信し続けます。)
既知の(オープン)プロキシおよびTOR出口ノードのデータベースが利用可能です。他よりも信頼できるものもありますが、コストもかかります(無料のデータベースが利用可能ですが)。
また;ボリュームによっては、いくつかの偽陽性/陰性があります。これが100%正確になることは決してないという事実を理解してください。したがって、正当なユーザーが違法または不正なレート制限として識別された場合に、正規のユーザーが別の方法でヘルプ/登録を取得する方法を提供します。また、Webサイト/サービスを管理している誰もが簡単に、IP(または電話番号)をブラックリストに追加(および削除)して、フラグを立てないがフラグを立てる必要がある簡単な方法を提供します。
リスク軽減を高めるために私が行うことは2つあります。
Captchaを常にオンまたは常にオフであると考えないでください。 IPアドレスごとの試行率に基づいてオンにします。グレイリストのようなものと考えてください。 UXに影響を与えることは、完全にブロックすることよりも優れている可能性があります。次に、失敗したキャプチャ/より高いレートに基づいて、さらにブロック(IPのブラックリストの合計など)を検討できます。
どのような緩和策を講じても、専用の攻撃者が考慮しなかった回避策や攻撃モードが発生するため、この可能性を防ぐ/警告するための対策が必要です。発信にレート制限を設定することを検討する必要がありますSMS単位時間あたりの一定量のコストのみを許可するか、コストが特定のしきい値に達したときにスタッフにそのような攻撃に対応するように警告する可能性があります。
これは、ループや複製などを生成し、悪意のある意図的な攻撃だけでなく、誤った大量のSMSメッセージを送信する可能性がある、ソフトウェア自体のバグからさらに保護します。