mcpField
F
fraud-detection

fraud-detection

github.com/finsilabs安全60123 次安装1 周前更新
代码仓库

关于 fraud-detection

面向电商商家的欺诈防护指南,涵盖 Shopify、WooCommerce、BigCommerce 和自定义商店的配置。内容包括分层风险评分、身份验证、频率规则及人工审核。

主要功能

  1. 01按平台选择欺诈工具
  2. 02风险评分与审核流程
  3. 033D Secure 配置指引
  4. 04频率检查与拦截规则
  5. 05监控拒付和误报

适用场景

  1. 01审核可疑的高价值订单
  2. 02减少盗刷测试和自动化购买
  3. 03检查无卡支付结账流程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill fraud-detection

安装后在 Claude Code 中输入/fraud-detection确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

tile.json
evals/composite-fraud-scoring-and-3ds-enforcem/
criteria.json
task.md
evals/manual-review-queue-with-authorize-only-/
criteria.json
task.md
evals/redis-velocity-check-thresholds-and-ttl/
criteria.json
task.md

详细介绍

欺诈检测

概述

支付欺诈会通过拒付、货物损失和争议处理费,让电商商家损失 2–3% 的收入。有效的欺诈检测需要结合平台原生风险评分、3D Secure 身份验证、交易频率检查,以及用于处理可疑订单的人工审核队列。合适的方案取决于所用平台:Shopify 内置欺诈分析工具,而 WooCommerce 和 BigCommerce 则需要专用的欺诈防范服务或支付处理商提供的欺诈工具。

何时使用此技能

  • 当拒付率超过交易量的 0.5% 时(Visa 将 0.9% 设为“过高”争议率的门槛)
  • 在具有陌生欺诈模式的新市场开展业务时
  • 销售高价值且易于转售的商品时(电子产品、礼品卡、奢侈品)
  • 发现账户接管、信用卡测试或机器人批量购买等模式时
  • 构建或审核处理无卡交易的结账流程时

核心说明

第 1 步:确定商家的平台并选择合适的欺诈工具
平台内置欺诈分析推荐的欺诈服务
ShopifyShopify 欺诈分析(免费提供);对订单进行基本风险评分启用 Stripe Radar 或 Signifyd(Shopify App Store),以进行高级机器学习评分
WooCommerce无内置功能使用 Stripe(搭配 Radar)或 Braintree 作为支付处理商;或安装 Kount 或 NoFraud 插件
BigCommerce支付处理商的欺诈工具(因处理商而异)Signifyd 可与 BigCommerce 原生集成;NoFraud 也支持 BigCommerce
所有平台—Stripe Radar(使用 Stripe 时)可为每笔扣款提供基于机器学习的欺诈评分,无需额外付费
第 2 步:启用并配置平台原生欺诈工具

Shopify

Shopify 会根据 IP 地址与账单地址不匹配、银行卡验证失败以及已知欺诈模式等信号,为每笔订单显示欺诈分析指标。

查看欺诈指标:

  1. 在 Shopify 管理后台打开任意订单
  2. 在订单详情面板中点击欺诈分析
  3. Shopify 会显示风险等级(高 / 中 / 低)及具体原因(例如,“银行卡验证值验证失败”“IP 地址所在国家/地区与账单地址所在国家/地区不同”)

配置欺诈响应规则:

  1. 前往设置 → 付款 → 欺诈防范(使用 Shopify Payments 时)
  2. 为被标记为高风险的订单启用自动审核——Shopify 会暂缓处理这些订单并向你发送电子邮件
  3. 对 Shopify 判定为最高风险的订单设置自动取消

Signifyd(Shopify App Store — 欺诈保障): Signifyd 提供拒付担保——如果他们批准的订单最终发生拒付,就会向你赔付。这是 Shopify 上最全面的解决方案。

  1. 从 Shopify App Store 安装 Signifyd
  2. Signifyd 使用机器学习评分自动审核每笔订单
  3. Signifyd 标记的订单会进入 Signifyd 控制台中的审核队列
  4. 设置 Signifyd Shopify 集成,以自动暂缓处理或取消高风险订单

WooCommerce

WooCommerce 不包含欺诈检测功能。你需要使用内置欺诈工具的支付处理商,或专用插件。

选项 A:Stripe Radar(推荐用于通过 Stripe 处理 WooCommerce 付款的情况)

如果使用 WooCommerce Stripe Payment Gateway:

  1. Stripe Radar 会自动启用——为 Stripe 账户中的每笔扣款评分
  2. 在 Stripe Dashboard 中,前往 Radar → Rules 添加自定义拦截/审核规则:
    # Block orders over $500 from high-fraud-rate IP countries
    Block if :order_amount: > 50000 and :ip_country: in ('NG', 'RO')
    
    # Review first-time customers placing large orders
    Review if :order_amount: > 20000 and :customer_account_age: < 7
    
    # Block cards used more than 3 times in the last hour
    Block if :card_velocity_hour: > 3
    
  3. 被标记为需要审核的订单会显示在 Stripe Dashboard → Radar → Reviews 中

选项 B:WooCommerce Anti-Fraud 插件(免费)

  1. 从插件目录安装 WooCommerce Anti-Fraud
  2. 根据以下条件配置风险评分规则:
    • 订单金额阈值
    • 新客户与高金额订单的组合
    • 代理/VPN IP 检测
    • 账单/配送国家不匹配
  3. 高风险订单会被设为“On Hold”状态,以便人工审核

选项 C:Kount 或 NoFraud(企业级) 对于订单量较大的 WooCommerce 商店,企业级欺诈防范平台可提供:

  • Kount:完整的欺诈管理平台,提供 ML 评分、人工审核工具和拒付管理
  • NoFraud:提供类似 Signifyd 的欺诈保障;通过 WooCommerce 插件集成

BigCommerce

Signifyd for BigCommerce:

  1. 从 BigCommerce App Marketplace 安装 Signifyd 应用
  2. 配置自动暂挂或取消高风险订单
  3. Signifyd 的保障涵盖已批准订单的拒付

支付处理商的欺诈工具:

  • Stripe(通过 BigCommerce Stripe 集成):包含 Radar;可在 Stripe Dashboard 中配置规则
  • PayPal:可在 PayPal 商业账户设置中使用 PayPal 的欺诈管理筛选器
  • Braintree:可通过 Kount 附加组件使用高级欺诈防护

自定义/无头

对于使用 Stripe 的自定义店面,可利用 Stripe Radar 进行 ML 评分,并在应用层添加针对业务特定模式的频率检查。

支付尝试后获取 Stripe 的欺诈评分:

const paymentIntent = await stripe.paymentIntents.retrieve(paymentIntentId, {
  expand: ['latest_charge'],
});
const riskScore = paymentIntent.latest_charge.outcome?.risk_score;   // 0–100
const riskLevel = paymentIntent.latest_charge.outcome?.risk_level;   // 'normal', 'elevated', 'highest'

针对高风险交易请求 3D Secure(将拒付责任转移给发卡机构):

const paymentIntent = await stripe.paymentIntents.create({
  amount: order.totalCents,
  currency: 'usd',
  payment_method_options: {
    card: {
      // 'automatic' = Stripe decides; 'challenge' = always require 3DS for high-risk
      request_three_d_secure: riskScore > 70 ? 'challenge' : 'automatic',
    },
  },
});

应用层频率检查:

import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL!);

async function checkVelocity(params: { email: string; ip: string; cardFingerprint: string; amountCents: number }) {
  const { email, ip, cardFingerprint, amountCents } = params;

  // IP: max 10 orders per hour
  const ipCount = await redis.incr(`vel:ip:${ip}`);
  if (ipCount === 1) await redis.expire(`vel:ip:${ip}`, 3600);
  if (ipCount > 10) return { allowed: false, reason: 'ip_velocity' };

  // Email: max 5 orders per 24 hours
  const emailCount = await redis.incr(`vel:email:${email.toLowerCase()}`);
  if (emailCount === 1) await redis.expire(`vel:email:${email.toLowerCase()}`, 86400);
  if (emailCount > 5) return { allowed: false, reason: 'email_velocity' };

  // Card: max $500 per day
  const spendKey = `vel:spend:${cardFingerprint}`;
  const currentSpend = parseInt(await redis.get(spendKey) ?? '0');
  if (currentSpend + amountCents > 50000) return { allowed: false, reason: 'daily_spend_limit' };

  return { allowed: true };
}

人工审核队列:

async function flagForManualReview(orderId: string, riskScore: number, signals: Record<string, unknown>) {
  // Hold the order — do NOT fulfill; do NOT capture payment (authorize only)
  await db.orders.update(orderId, {
    status: 'pending_fraud_review',
    fraud_risk_score: riskScore,
    fraud_signals: signals,
    review_requested_at: new Date(),
  });

  // Notify fraud review team
  await sendSlackAlert('#fraud-review', {
    text: `Order ${orderId} flagged for review. Risk score: ${riskScore}/100`,
    actions: [
      { text: 'Approve', url: `${ADMIN_URL}/fraud-review/${orderId}/approve` },
      { text: Reject', url: `${ADMIN_URL}/fraud-review/${orderId}/reject` },
    ],
  });
}

// Auto-cancel unreviewed orders after 48 hours
async function expireUnreviewedOrders() {
  const expired = await db.orders.findExpiredReviews(48);
  for (const order of expired) {
    await stripe.paymentIntents.cancel(order.payment_intent_id);
    await db.orders.update(order.id, { status: 'fraud_review_expired' });
    await sendOrderCancellationEmail(order);
  }
}

最佳实践

  • 分层防御——没有任何单一信号能可靠地阻止所有欺诈;应结合 Stripe Radar、频率检查、IP 信誉和设备指纹识别
  • 对高风险订单使用先授权后扣款——在结账时授权以冻结资金,然后仅在欺诈审核通过后扣款;撤销授权的成本低于退款
  • 将误报率作为 KPI 追踪——如果超过 1% 的合法订单被拦截或暂挂,说明规则过于严格;同时衡量欺诈损失和误报造成的收入损失
  • 定期轮换并隐藏欺诈规则——老练的欺诈者会探测结账流程以找出规则阈值;切勿在 API 错误消息中暴露拦截原因
  • 维护欺诈邮箱、卡片和设备的拒绝名单——确认发生拒付欺诈后,将相关标识符加入拦截名单,防止后续订单再次使用
  • 每月检查拒付率——如果 Visa/Mastercard 的拒付率升至 0.5% 以上,应检查欺诈规则;超过 0.9% 会触发 Visa 的争议监控计划

常见陷阱

问题解决方案
3DS 导致结账放弃使用 automatic 3DS 模式 — 由 Stripe 判断何时需要验证挑战;低风险交易可无缝完成身份验证
速度规则拦截了合法的大宗买家将 B2B 客户或高 LTV 客户群列入速度规则白名单;根据账户历史记录设置分级限额
人工审核队列不断积压设定 SLA 目标(4 小时审核时限);对 48 小时内未审核的订单实施自动取消
已通过 3DS 身份验证,却仍遭遇拒付确认你的支付处理商正确提交 3DS 身份验证数据(eci、cavv、xid);缺少这些字段时,责任转移不适用
Redis 速度键永不过期设置新键时务必调用 EXPIRE;使用 SET key value EX seconds NX,以原子方式设置键(仅当键不存在时)并配置过期时间

相关技能

  • @secure-checkout
  • @account-security
  • @stripe-integration
  • @bot-protection
  • @gdpr-ecommerce

评论

支持 Markdown