mcpField
B
bot-protection

bot-protection

github.com/finsilabs安全6091 次安装5 天前更新
代码仓库

关于 bot-protection

为电商团队提供防护指导,应对数据抓取、抢购机器人和凭证填充攻击。内容涵盖从 WAF 规则、验证码到速率限制和商品发售排队的分层措施。

主要功能

  1. 01按平台提供防护建议
  2. 02配置 WAF 和机器人规则
  3. 03为高风险表单添加验证码
  4. 04速率限制与购买数量限制
  5. 05商品发售等待室

适用场景

  1. 01减少价格和库存信息抓取
  2. 02防止抢购机器人冲击限量商品发售
  3. 03缓解登录凭证填充攻击
  4. 04控制可疑结账或 API 流量

安装

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

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill bot-protection

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

包含的文件

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

tile.json
evals/edge-rate-limiting-middleware/
criteria.json
task.md
evals/honeypot-and-turnstile-captcha/
criteria.json
task.md
evals/scalper-detection-and-fair-queuing/
criteria.json
task.md

详细介绍

机器人防护

概述

电商商店面临三种主要的机器人威胁:抓取竞争对手定价和库存数据的爬虫、瞬间抢购库存有限商品的黄牛机器人,以及测试被盗用户名和密码的撞库机器人。有效的机器人防护需要结合平台级防御、WAF(Web 应用防火墙)、针对高风险操作的 CAPTCHA,以及可选的行为分析。对大多数商家来说,Cloudflare 能提供最有效且对用户影响最小的防护——无论使用哪个平台,它都可以部署在商店前端。

何时使用此技能

  • 发布容易遭黄牛抢购的限量商品时(运动鞋、演唱会门票、游戏主机)
  • 竞争对手有系统地抓取商品价格或库存时
  • 账户登录页面出现撞库迹象时(来自分布式 IP 的登录失败率很高)
  • 结账漏斗分析显示完成时间短得可疑时(结账时间不足 5 秒)
  • 机器人流量消耗商品目录 API 资源,导致基础设施不堪重负时

核心说明

第 1 步:确定商家的平台并选择合适的工具
平台内置机器人防护推荐的额外防护层
ShopifyShopify 包含基本的机器人检测和速率限制在 Shopify 商店前端启用 Cloudflare(免费套餐),以使用 WAF 规则和机器人管理功能
WooCommerce未内置防护——登录和结账表单完全暴露使用 Wordfence(免费版)保护登录;使用 Cloudflare 提供 WAF 和速率限制
BigCommerce包含基本的 DDoS 防护使用 Cloudflare 进行高级机器人管理;BigCommerce 支持通过自定义脚本添加 CAPTCHA
高流量抢购(任何平台)无使用 Cloudflare Waiting Room(Business/Enterprise)或 Queue-it 提供托管排队
自定义 / 无头架构必须自行构建Cloudflare + 自定义速率限制 + 行为分析
第 2 步:设置基础机器人防护

第 2a 步:启用 Cloudflare(适用于所有平台)

Cloudflare 免费套餐可在 DNS 层面提供有效的机器人防护,无需改动应用程序代码。

  1. 在 cloudflare.com 添加域名(免费套餐适用于大多数商店)
  2. 将域名的名称服务器更新为 Cloudflare 提供的名称服务器
  3. 在 Cloudflare 控制面板中:
    • SSL/TLS → Overview:设置为 "Full (Strict)"
    • Security → WAF → Managed rules:启用 Cloudflare Managed Ruleset(免费)和 OWASP Core Ruleset
    • Security → Bots → Bot Fight Mode:启用(免费)——拦截已知的机器人 User-Agent
  4. 如需额外防护,创建自定义 WAF Rules(Security → WAF → Custom Rules):
    # Block requests with no User-Agent header
    (not http.user_agent contains " " and not cf.client.bot)
    
    # Rate limit catalog API scraping
    # Under Security → WAF → Rate Limiting Rules:
    # Path: /products/* or /api/products/*
    # Rate: 100 requests per minute per IP
    # Action: Block for 1 hour
    

Cloudflare Bot Management(Business 套餐,约 200 美元/月): 对于存在严重黄牛抢购或数据抓取问题的商店,Cloudflare Bot Management 会使用机器学习为每个请求评分,并对可疑流量发起验证或进行拦截,同时不影响正常购物者。


Step 2b:为高风险表单添加 CAPTCHA

在登录和结账表单上使用 Cloudflare Turnstile(免费、注重隐私、优先采用无感验证)。Turnstile 会先使用被动信号,只有之后才会显示可见的验证挑战 — 大多数合法用户都不会看到 CAPTCHA。

将 Turnstile 添加到 Shopify 商店:

  1. 前往 cloudflare.com/products/turnstile 注册 Cloudflare Turnstile(免费)
  2. 创建新站点,选择 "Managed" 模式,并记下站点密钥和密钥
  3. 在 Shopify 中自定义主题,将 Turnstile 小组件添加到登录和结账表单:
    • 使用 Shopify 主题应用扩展,或直接编辑主题
    • 将 <script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script> 和 <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"> 添加到登录表单
  4. 在服务器端验证令牌,或在自定义应用中验证,也可以使用 Shopify Function

将 Turnstile 添加到 WooCommerce:

  1. 安装 Cloudflare Turnstile WordPress 插件(在插件目录中搜索 "Cloudflare Turnstile")
  2. 输入站点密钥和密钥
  3. 配置要保护的表单:登录、注册、结账和评论表单

服务器端令牌验证:

async function verifyTurnstile(token: string, ip: string): Promise<boolean> {
  const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
    method: 'POST',
    body: new URLSearchParams({
      secret: process.env.TURNSTILE_SECRET_KEY!,
      response: token,
      remoteip: ip,
    }),
  });
  const data = await res.json();
  return data.success === true;
}

Step 2c:为产品发售(高需求发布)设置等候室

对于库存有限的发售,如果预计会出现流量激增和黄牛:

Cloudflare Waiting Room(Business/Enterprise 计划):

  1. 在 Cloudflare 控制面板中,前往 Traffic → Waiting Room
  2. 点击 Create
  3. 配置:
    • Hostname:商店域名
    • Path:产品 URL 模式(例如,/products/limited-* 或 /collections/drop)
    • Total active users:允许通过的并发用户数上限(例如,500)
    • New users per minute:准入速率(例如,每分钟 100 人)
  4. 使用品牌元素自定义等候室页面
  5. Cloudflare 会公平地为超额流量排队;机器人流量会在进入队列前由 Cloudflare 的机器人检测功能过滤

Step 2d:平台专属防护

Shopify — 按客户设置购买限额: Shopify 原生不支持对限量商品设置单个客户的购买限额。可选方案:

  • 使用 Shopify 应用(例如 Locksmith 或 Order Limits by MLveda)限制每位客户的购买数量
  • Shopify Plus:使用 Shopify Functions 在结账时执行限额

WooCommerce — 防止登录暴力破解:

  1. 安装 Wordfence Security(免费)
  2. 在 Wordfence → Login Security 下启用暴力破解防护
  3. 为管理员账户启用双重身份验证

WooCommerce — 结账 CAPTCHA:

  1. 安装 Google Recaptcha for WooCommerce(免费)或 Cloudflare Turnstile 插件
  2. 配置要保护的表单:登录、注册、结账和找回密码表单

自定义 / 无头 — 应用层速率限制

对于自定义店面,在中间件或边缘层添加速率限制:

// Next.js Edge Middleware — rate limiting per IP per route
import { NextRequest, NextResponse } from 'next/server';
import { Ratelimit } from '@upstash/ratelimit';
import { Redis } from '@upstash/redis';

const redis = Redis.fromEnv();
const limiters = {
  checkout: new Ratelimit({ redis, limiter: Ratelimit.slidingWindow(10, '1 m'), prefix: 'rl_checkout' }),
  catalog:  new Ratelimit({ redis, limiter: Ratelimit.slidingWindow(100, '1 m'), prefix: 'rl_catalog' }),
};

export async function middleware(request: NextRequest) {
  const ip = request.ip ?? request.headers.get('x-forwarded-for') ?? '127.0.0.1';
  const pathname = request.nextUrl.pathname;

  const limiter = pathname.startsWith('/checkout') ? limiters.checkout
    : pathname.startsWith('/products') ? limiters.catalog
    : null;

  if (limiter) {
    const { success } = await limiter.limit(ip);
    if (!success) return new NextResponse('Too Many Requests', { status: 429 });
  }

  return NextResponse.next();
}

按客户设置购买限额(自定义):

async function enforcePurchaseLimit(customerId: string, productId: string, limit = 1) {
  const count = await db.orders.countByCustomerAndProduct(customerId, productId);
  if (count >= limit) throw new Error(`Purchase limit of ${limit} per customer reached`);

  // Atomic lock to prevent race conditions at high concurrency
  const lockKey = `purchase_lock:${customerId}:${productId}`;
  const acquired = await redis.set(lockKey, '1', 'EX', 30, 'NX');
  if (!acquired) throw new Error('Purchase already in progress');
}

最佳实践

  • 叠加多层防护 — 没有任何单一技术能阻止所有机器人;应结合使用 Cloudflare WAF、Turnstile CAPTCHA 和应用级速率限制
  • 优先使用无感 CAPTCHA — Cloudflare Turnstile 和 hCaptcha 被动模式只会验证可疑请求;每次结账都显示可见 CAPTCHA 会影响转化率
  • 对会话进行指纹识别,而不只是对 IP 进行识别 — 机器人会通过住宅代理轮换 IP;除了基于 IP 的规则,还应结合行为信号和会话特征
  • 在数据库层面执行单品购买限额 — 客户端限额很容易绕过;应通过服务端检查或数据库约束来执行限额
  • 监控机器人与真人的比例 — 设置 Cloudflare Analytics 或 Datadog 仪表板,跟踪被拦截请求与总请求数的比例;比例激增意味着出现了新的机器人攻击活动
  • 提前公布高需求商品的发售并设置候补名单 — 提前收集电子邮件地址,可让候补名单成员优先访问,使排队更公平,并降低发售时的需求

常见问题

问题解决方案
速率限制拦截了限时抢购的正常流量为有购买记录的已验证客户设置更高的速率限制;仅对未验证请求应用严格限制
Turnstile CAPTCHA 导致结账流程异常设置期间以“始终通过”模式测试 Turnstile;在生产环境启用前,确保服务端验证端点正常工作
商品发售时等待室未能启用提前 24 小时配置 Cloudflare Waiting Room,并使用暂存 URL 进行测试;确保路径模式与商品 URL 匹配
通过多个账户绕过购买限额对购买高需求商品的用户要求进行手机验证;将购买限额关联到已验证的电话号码或身份,而不只是账户
Wordfence 拦截了正常的 WooCommerce 客户检查 Wordfence 中被拦截的 IP 日志;将正常客户加入允许列表并调整敏感度设置

相关技能

  • @fraud-detection
  • @account-security
  • @secure-checkout
  • @flash-sale-engine
  • @monitoring-alerting-commerce

评论

支持 Markdown