엔지니어링
사기 탐지 파이프라인 구축하기
하나의 의심스러운 신호만으로는 전체 상황을 파악하기 어렵습니다. 이메일 자체는 정상적으로 보일 수 있지만, 데이터센터 IP와 최근에 등록된 도메인과 결합되면 상황이 급변합니다. 여러 Veille API를 파이프라인으로 결합하면 모든 가입에 대한 종합적인 위험 뷰를 얻을 수 있습니다.
아키텍처 개요
가장 단순한 형태로: 이메일을 검증하고(/v1/intelligence/email), 도메인 나이를 확인하고(/v1/intelligence/domain), IP를 점수화합니다(/v1/intelligence/ip). 세 번의 호출, 세 가지 신호, 하나의 종합 점수입니다.
빠른 통합
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가지 활용 사례
- 사용자 등록 - 가입 시 종합 점수를 계산하고 임계값 초과 시 자동 거부합니다.
- 결제 확인 - 결제 처리 전에 파이프라인을 실행하여 합성 신원을 탐지합니다.
- 마켓플레이스 판매자 온보딩 - 이메일, 도메인, IP 신호를 결합하여 신규 판매자를 심사합니다.
- 콘텐츠 모더레이션 - 고위험 계정의 게시물을 검토 우선순위로 설정합니다.
- 웹훅 보안 - 들어오는 웹훅의 원본 IP와 도메인을 처리 전에 검증합니다.
관련 글
- IP 평판: 방화벽만으로는 충분하지 않은 이유 - 이 파이프라인에서 사용되는 IP 신호에 대한 심층 분석
- 일회용 이메일이 계정 사기에 사용되는 방법 - 이 파이프라인에서 사용되는 이메일 신호에 대한 심층 분석
- IBAN 검증: 체크섬 그 이상 - 결제 검증을 추가하여 체크아웃 사기 줄이기
- Paperclip 자율 회사에서 Veille API 사용하기 - 하트비트와 비용 제어 기능을 갖춘 Paperclip 조직도 내에서 이 사기 탐지 파이프라인 구현하기