メインコンテンツへスキップ

不正防止

機械学習、IPジオロケーション、カスタマイズ可能なリスクルールを活用したインテリジェントな不正検知で不正取引からビジネスを保護します。

概要

Omise不正防止は、加盟店が処理前に不正取引を識別して防止するのを支援します。システムは、カード詳細、取引パターン、IPジオロケーション、履歴行動など、複数のシグナルを分析して、リアルタイムでリスクを評価します。

主な機能:

  • リアルタイム分析 - チェックアウト時の即座のリスク評価
  • 機械学習 - AI駆動の不正検知モデル
  • IPジオロケーション - 場所の不一致を検出
  • ベロシティチェック - 疑わしい取引パターンを識別
  • 設定可能なルール - カスタムリスク閾値
  • 手動レビュー - レビューのために取引にフラグを立てる
  • チャージバック保護 - 異議申し立て率を削減

仕組み

リスクスコアリング

取引にはリスクスコア(0-100)が割り当てられます:

スコア範囲リスクレベルアクション
0-30低リスク自動承認
31-70中リスク手動レビューのためにフラグ
71-100高リスク自動ブロック*

*リスク許容度に基づいて設定可能な閾値

不正検知シグナル

1. IPジオロケーション

顧客のIPアドレスを分析して検出:

  • 場所の不一致(IP国 vs カード国)
  • 既知のプロキシ/VPN使用
  • 高リスク国
  • データセンターIP(非住宅用)
// チャージオブジェクトで利用可能なIPデータ
{
"ip": "203.113.128.45",
"ip_country": "TH",
"card_country": "US", // 不一致がフラグ
"fraud_score": 65
}

2. ベロシティチェック

取引パターンを監視:

  • 同じIPから複数のカード
  • 同じカードが急速に使用される
  • 異常な購入頻度
  • 新規顧客からの高額注文

フラグされる例のパターン:

  • 10分以内に5回以上の取引
  • 3つ以上の異なるウェブサイトで同じカード
  • 注文額の突然の急増

3. カード確認

カード詳細を検証:

  • BIN(銀行識別番号)分析
  • カードタイプの一貫性
  • AVS(住所確認サービス)照合
  • CVV確認結果

4. 履歴行動

過去の取引を分析:

  • 顧客のチャージバック履歴
  • 以前に異議申し立てされたカード
  • ブラックリストに登録されたカード番号
  • 既知の不正パターン

5. 取引特性

注文詳細を検査:

  • 異常に大きな金額
  • 高リスク製品カテゴリ
  • 異なる国への配送
  • 複数の配送先住所

実装

不正防止を有効化

不正防止はすべてのOmiseアカウントでデフォルトで有効になっています。コード変更は不要 - すべてのチャージで自動的に機能します。

API経由で不正スコアにアクセス

const charge = await omise.charges.retrieve('chrg_test_...');

console.log('Risk Score:', charge.risk_score); // 0-100
console.log('IP Country:', charge.ip_country);
console.log('Card Country:', charge.card.country);

不正データを含むチャージオブジェクト:

{
"id": "chrg_test_5rt6s9vah5lkvi1rh9c",
"amount": 100000,
"status": "pending",
"risk_score": 45,
"risk_level": "medium",
"ip": "203.113.128.45",
"ip_country": "TH",
"card": {
"country": "TH",
"financing": "credit"
}
}

手動レビューワークフロー

app.post('/webhooks/omise', async (req, res) => {
const event = req.body;

if (event.key === 'charge.complete') {
const charge = event.data;

// リスクスコアをチェック
if (charge.risk_score > 70) {
// 高リスク - 調査
await flagForManualReview(charge.id);
await notifyFraudTeam(charge);
} else if (charge.risk_score > 40) {
// 中リスク - 追加チェック
await performAdditionalVerification(charge);
}
// 低リスク - 通常処理
}

res.sendStatus(200);
});

カスタムリスクルール

async function assessCustomerRisk(charge) {
let riskScore = charge.risk_score;

// カスタムルールを追加
if (charge.amount > 500000) { // 5,000฿以上の注文
riskScore += 10;
}

if (isNewCustomer(charge.metadata.customer_id)) {
riskScore += 15;
}

if (charge.ip_country !== charge.card.country) {
riskScore += 20;
}

if (hasRecentChargebacks(charge.customer)) {
riskScore += 30;
}

return riskScore;
}

ダッシュボード管理

不正スコアを表示

  1. Omiseダッシュボードにログイン
  2. チャージに移動
  3. リスクインジケーターを表示:
    • 🟢 低リスク - 緑のバッジ
    • 🟡 中リスク - 黄色のバッジ
    • 🔴 高リスク - 赤のバッジ

手動レビューキュー

  1. 不正 → レビューキューに移動
  2. フラグが立てられた取引を確認
  3. 取引詳細をレビュー:
    • 顧客情報
    • IPジオロケーションデータ
    • 取引履歴
    • リスク要因
  4. アクションを実行:
    • 承認 - 支払いを処理
    • 拒否 - チャージをキャンセル
    • 詳細情報をリクエスト - 顧客に連絡

ベストプラクティス

1. 顧客情報を収集

const charge = await omise.charges.create({
amount: 100000,
currency: 'THB',
card: tokenId,
description: 'Order #12345',
metadata: {
customer_id: 'cust_001',
customer_email: 'john@example.com',
customer_phone: '+66876543210',
order_id: '12345',
shipping_address: '123 Main St, Bangkok',
billing_address: '123 Main St, Bangkok',
previous_orders: 5,
account_age_days: 180
}
});

2. 3D Secureを実装

高リスク取引に3D Secureを追加して責任を移転:

if (charge.risk_score > 50) {
// 中/高リスクに3D Secureを要求
const charge = await omise.charges.create({
amount: amount,
currency: 'THB',
card: tokenId,
return_uri: 'https://yourdomain.com/callback' // 3DSを有効化
});
}

3. ベロシティ制限

const RATE_LIMITS = {
per_card: { count: 3, window: 3600000 }, // 1時間に3回
per_ip: { count: 5, window: 3600000 }, // 1時間に5回
per_customer: { count: 10, window: 86400000 } // 1日に10回
};

async function checkVelocity(charge) {
const cardCharges = await getRecentCharges({
card_last_digits: charge.card.last_digits,
since: Date.now() - RATE_LIMITS.per_card.window
});

if (cardCharges.length >= RATE_LIMITS.per_card.count) {
return { blocked: true, reason: 'カードでのチャージが多すぎます' };
}

return { allowed: true };
}

よくある不正パターン

パターン1: カードテスト

指標:

  • 複数の小額チャージ(฿10-฿50)
  • 急速な連続
  • 異なるカード、同じIP
  • 高い却下率

予防:

// カードテストを検出
if (recentCharges.length > 10 && avgAmount < 5000) {
blockIP(charge.ip);
notifySecurityTeam();
}

パターン2: 地理的不一致

指標:

  • タイのIP
  • 米国発行のカード
  • 第三国への配送

予防:

if (charge.ip_country !== charge.card.country) {
requireAdditionalVerification();
}

パターン3: 高額初回注文

指標:

  • 新規顧客
  • 大きな注文(>฿10,000)
  • 急ぎの配送
  • 異なる請求先/配送先住所

予防:

if (isNewCustomer && amount > 1000000 && isRushShipping) {
requirePhoneVerification();
contactCustomerDirectly();
}

FAQ

不正防止はOmiseアカウントに含まれていますか?

はい、基本的な不正防止はすべてのOmise加盟店に追加費用なしで含まれています。高度な機能には特定のアカウント設定が必要な場合があります。

不正ルールをカスタマイズできますか?

はい、Omiseの不正スコアの上にカスタムリスク評価ロジックを実装できます。高度なルール設定については、support@omise.coにお問い合わせください。

ブロックされた取引はどうなりますか?

ブロックされた取引は、支払い処理業者に到達する前に却下されます。顧客には一般的なエラーメッセージが表示され、別の方法で支払いを試みることができます。

誤検知を減らすにはどうすればよいですか?
  • 保守的な閾値から始めて、データに基づいて調整
  • より多くの顧客情報を収集(メール、電話、住所)
  • 顧客確認フローを実装
  • 境界線のケースに3D Secureを使用
  • 却下された正当な取引を監視および分析

関連リソース

次のステップ

  1. 不正防止を有効化
  2. リスク閾値を設定
  3. 手動レビューワークフローを実装
  4. 3D Secureを設定
  5. 不正メトリクスを監視
  6. 誤検知率を最適化