上限に達する前にキーの使用状況を監視する
割り当てヘッダーを随時確認しておけば、リクエストが実際に拒否されるよりずっと前に、上限が近づいていることが分かります。
専用の不正検知サービスは、ほとんどの小規模な新規登録フォームには過剰です。IPアドレスが示す情報と新規登録フォームで申告された情報を比べるシンプルなチェックだけでも、明らかに食い違う試みのかなりの部分を見つけられます。
GET /v1/ip?ip=198.51.100.200{
"status": "ok",
"ip": "198.51.100.200",
"version": 4,
"found": true,
"country": "Brazil",
"country_code": "BR",
"region": "Sao Paulo",
"city": "Sao Paulo",
"postcode": "01310",
"lat": -23.5505,
"lon": -46.6333,
"timezone": "America/Sao_Paulo",
"asn": 8901,
"org": "Example Cloud Provider"
}新規登録フォームで請求先の国を尋ねていて、入力された値がIP検索のcountry_codeと一致しない場合でも、それだけでは何かが間違っている証拠にはなりません。旅行もVPNの利用も、どちらもよくある正当なことだからです。不一致は自動的な拒否ではなく、シンプルなスコアに加算する1ポイントとして扱ってください。
orgフィールドからは、アドレスが家庭向けのISPのものか、データセンターやクラウドホスティングのプロバイダーのものかがわかることがよくあります。実際の個人の顧客がめったに閲覧に使わないクラウドホスティングのネットワークからの新規登録は、よく知られた家庭向けISPからの新規登録よりも高いスコアに値します。ただし、これもそれだけで自動的に拒否する理由にはなりません。
不正な新規登録の周辺で特定のASNの値が繰り返し現れることに気づいたら、それらの特定のasn番号の短いリストを保持し、新しい新規登録がそのいずれかに一致するたびに固定のスコアを加算すると、今後に向けてそのパターンを軽量な方法で組み込めます。この程度の範囲のチェックに、サードパーティの本格的なASNレピュテーションデータベースは必要ありません。
if ip_info["asn"] in known_abuse_asns:
score += 2国の不一致、ホスティングネットワークからのアクセス、その他自社の新規登録の流れに特有の事項など、少数のシンプルなチェックを合計して1つの数値スコアにします。設定したしきい値を超えたものは、そのままブロックするのではなく、手動での確認や、メールでの確認などの追加の検証ステップに回してください。
他のコンテキストなしに、VPNやホスティングの範囲からの新規登録をすべて自動的に高リスクとしてスコア付けしないでください。多くの正当な顧客が、たまたまデータセンターのIP範囲を経由する会社のネットワークや、まったく普通のプライバシー上の理由で使っているVPNから閲覧しています。ネットワークの種類を、単独で不適格とするフラグではなく、いくつかある手がかりの1つとして重み付けすれば、誤検知で本物の顧客を追い返すことを防げます。
共有のオフィスネットワークや大手モバイルキャリアのキャリアグレードNATでは、互いに無関係な正当な新規登録が、短時間のうちに同じIPアドレスから大量に行われることがあります。チェックの一部としてIPごとの登録数も追跡している場合は、こうしたケースを許容できるよう閾値を十分に余裕のある値に設定するか、単独のルールとしてではなく国やネットワークのシグナルと合わせて監視してください。
この種のチェックは、明らかに手間をかけていない不正を捕捉するためのものであり、不正による損失が深刻な懸念となる事業において本格的な不正防止システムの代わりになるものではありません。最終判定ではなく、最初のフィルターとして扱ってください。
登録の試行1回につき検索は1回で、1リクエストです。登録が絶え間なく届くフォームであっても、一般的な量であれば、すべてのキーに含まれる1日あたりの無料リクエスト2,500件の範囲に十分収まります。X-Quota-UsedとX-Quota-Free-Remainingのレスポンスヘッダーを見れば、登録試行の急増によってその割り当てがどれだけ消費されているかを簡単に把握できます。
IPから得られるいくつかのシグナルで作る軽量なスコアは、専用の不正対策プラットフォームのような負担なしに、何もしない場合より多くの不正を捕捉できます。この種のチェックに使えるすべてのフィールドはIPv4検索のドキュメントに掲載しています。