エンジニアリング
不正検出パイプラインの構築
単一の疑わしいシグナルだけでは全体像を伝えることはほとんどありません。メール自体は問題なく見えるかもしれませんが、データセンターIPと新規登録ドメインと組み合わさると、状況が急変します。複数のVeille APIをパイプラインに組み合わせると、すべてのサインアップに対する複合リスクビューが得られます。
アーキテクチャの概要
最もシンプルな形では:メールを検証し(/v1/intelligence/email)、ドメイン年齢を確認し(/v1/intelligence/domain)、IPをスコアリングします(/v1/intelligence/ip)。3回の呼び出し、3つのシグナル、1つの複合スコアです。
クイック統合
Python
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.veille.io/v1"
def score_signup(email: str, ip: str) -> dict:
headers = {"x-api-key": API_KEY}
email_data = requests.get(
f"{BASE_URL}/intelligence/email", params={"query": email}, headers=headers
).json()
domain_data = requests.get(
f"{BASE_URL}/intelligence/domain", params={"query": email_data["domain"]}, headers=headers
).json()
ip_data = requests.get(
f"{BASE_URL}/intelligence/ip", params={"query": ip}, headers=headers
).json()
age = min(domain_data.get("domain_age_days", 365), 365)
domain_risk = ((365 - age) / 365) * 100
composite = (
email_data["risk_score"] * 0.40
+ domain_risk * 0.35
+ ip_data["threat_score"] * 0.25
)
return {
"composite_score": round(composite),
"disposable_email": email_data["disposable"],
"vpn_or_proxy": ip_data["is_vpn"] or ip_data["is_proxy"],
"domain_age_days": domain_data.get("domain_age_days"),
}
TypeScript
const API_KEY = "YOUR_API_KEY";
const BASE_URL = "https://api.veille.io/v1";
const headers = { "x-api-key": API_KEY };
async function scoreSignup(email: string, ip: string) {
const [emailResponse, ipResponse] = await Promise.all([
fetch(`${BASE_URL}/intelligence/email?query=${email}`, { headers }),
fetch(`${BASE_URL}/intelligence/ip?query=${ip}`, { headers }),
]);
const [emailData, ipData] = await Promise.all([
emailResponse.json(),
ipResponse.json(),
]);
const domainResponse = await fetch(
`${BASE_URL}/intelligence/domain?query=${emailData.domain}`,
{ headers }
);
const domainData = await domainResponse.json();
const age = Math.min(domainData.domain_age_days ?? 365, 365);
const domainRisk = ((365 - age) / 365) * 100;
return {
compositeScore: Math.round(
emailData.risk_score * 0.4 + domainRisk * 0.35 + ipData.threat_score * 0.25
),
disposableEmail: emailData.disposable,
vpnOrProxy: ipData.is_vpn || ipData.is_proxy,
domainAgeDays: domainData.domain_age_days,
};
}
推奨ウェイト
| シグナル | ウェイト | 理由 |
|---|---|---|
| メールリスクスコア | 40% | 使い捨て/ロールアカウントは最も強力な不正指標です |
| ドメイン年齢リスク | 35% | 新規登録ドメインは不正と強く相関します |
| IP脅威スコア | 25% | VPNはプライバシー意識の高い正当なユーザーも使用します |
5つのユースケース
- ユーザー登録 - サインアップ時に複合スコアを計算し、閾値を超えた場合は自動拒否します。
- チェックアウト検証 - 支払い処理前にパイプラインを実行して合成IDを検出します。
- マーケットプレイス出品者のオンボーディング - メール、ドメイン、IPシグナルを組み合わせて新規販売者をスクリーニングします。
- コンテンツモデレーション - 高リスクアカウントからの投稿のレビューを優先します。
- Webセキュリティ - 受信Webhookの元のIPとドメインを処理前に検証します。
関連記事
- IPレピュテーション:ファイアウォールだけでは不十分な理由 - このパイプラインで使用されるIPシグナルの詳細分析
- 使い捨てメールがアカウント詐欺に使われる方法 - このパイプラインで使用されるメールシグナルの詳細分析
- IBANバリデーション:単なるチェックサム以上のもの - チェックアウト時の不正を減らすための支払い検証の追加
- PaperclipのAI自律企業でVeille APIを使う - ハートビートとコスト管理を備えたPaperclipの組織図内にこの不正検出パイプラインを実装する