mcpField
P
pci-dss-compliance

pci-dss-compliance

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

关于 pci-dss-compliance

pci-dss-compliance 是面向商户和开发者的 PCI-DSS 合规指导技能,帮助根据支付数据流向判断评估范围,并介绍 Shopify、WooCommerce、BigCommerce 和自定义店面的控制措施。重点是通过托管结账和令牌化减少卡数据接触范围。

主要功能

  1. 01依据支付方式判断 SAQ 类型
  2. 02比较托管结账与自定义集成范围
  3. 03说明平台相关安全配置
  4. 04介绍令牌化与卡数据保护
  5. 05整理日志、访问控制和扫描要求
  6. 06提供审计准备检查项

适用场景

  1. 01确定信用卡业务的 PCI 范围
  2. 02选择适用的 SAQ 问卷
  3. 03降低系统接触持卡人数据的范围
  4. 04准备安全审计与合规评估

安装

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

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill pci-dss-compliance

安装后在 Claude Code 中输入/pci-dss-compliance确认已加载。

包含的文件

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

tile.json
evals/pci-audit-logging-implementation/
criteria.json
task.md
evals/rbac-roles-and-password-policy/
criteria.json
task.md
evals/saq-type-selection-and-scope-reduction/
criteria.json
task.md

详细介绍

PCI-DSS 合规性

概述

PCI-DSS(支付卡行业数据安全标准)适用于所有接受银行卡付款的商户。合规义务的范围和复杂程度,几乎完全取决于银行卡数据如何流经你的系统。使用托管支付表单(Shopify Payments、Stripe Checkout、PayPal hosted)的商户,可以选择最简单的评估(SAQ A,约 22 项控制要求)。运行自定义支付页面的商户,则面临最复杂的评估(SAQ D,约 330 项控制要求)。PCI 合规中最重要的一项决定是:选择能最大限度缩小合规范围的支付方式。

何时使用此技能

  • 接受信用卡付款,需要确定 PCI 合规范围时
  • 在 SAQ A、SAQ A-EP、SAQ D 或其他问卷类型之间进行选择时
  • 实施令牌化以缩小 PCI 合规范围时
  • 为做好 PCI 审计准备而设置日志记录、监控和告警基础设施时
  • 准备 QSA(合格安全评估员)审计或填写 SAQ 时

核心说明

步骤 1:根据支付方式确定 PCI 合规范围

PCI 合规中最重要的决定,是银行卡数据如何流经你的环境:

集成方式SAQ 类型控制要求约数适用对象
完全托管的结账页面(Shopify Payments、Stripe Checkout、PayPal hosted)SAQ A~22银行卡数据不会接触你的服务器;客户会被重定向到支付处理商的支付页面
在你的页面上使用 JavaScript 令牌化(Stripe Elements、Braintree Drop-in)SAQ A-EP~191银行卡数据通过你页面上的 iframe 输入;你的服务器不会接触原始卡号
你的服务器会接触银行卡数据SAQ D~330银行卡数据会经过你的应用服务器

建议:尽可能始终选择 SAQ A。 使用 Shopify Payments、Stripe Checkout 或 PayPal hosted 结账。将合规类型从 SAQ D 改为 SAQ A,可减少约 85% 的年度合规工作量。

步骤 2:针对特定平台进行 PCI 设置

Shopify

Shopify 是 PCI-DSS 一级服务提供商。使用 Shopify Payments 或通过 Shopify 结账接入任何支付网关时,Shopify 会负责支付处理环境的 PCI 合规。

作为 Shopify 商户,你的 PCI 合规范围:

  • 使用 Shopify 托管的结账页面和 Shopify Payments:SAQ A — Shopify 会处理所有事项
  • 你只需负责:确保 Shopify 管理后台的访问安全(强密码、2FA)、不在应用或电子表格中存储持卡人数据,以及审查第三方应用的安全性

在 Shopify 上完成 SAQ A:

  1. 从 PCI 安全标准委员会(pcisecuritystandards.org)下载 SAQ A
  2. Shopify 商户 PCI 合规文档位于 help.shopify.com/en/manual/payments/pci-compliance
  3. Shopify 会为其平台提供合规证明(AoC)——将其作为提交给收单机构的证明材料

你仍需负责的关键控制措施:

  • 管理员账户安全:为所有 Shopify 员工账户启用 2FA(Settings → Users → require 2FA)
  • 不在 Shopify 以外的任何位置存储卡号(不存入电子表格或第三方数据库)
  • 审查已安装应用的数据安全实践

WooCommerce

WooCommerce 本身不符合 PCI 标准——是否合规取决于你的托管服务、支付网关和实现方式。

尽量缩小范围:使用托管式支付网关:

选项 A — Stripe Checkout(托管式重定向) → SAQ A

// Use WooCommerce Stripe Gateway in "Stripe Checkout" mode
// In WooCommerce → Settings → Payments → Stripe → Stripe Checkout: enable
// Customer is redirected to stripe.com for payment; SAQ A applies

选项 B — 在 WooCommerce 中使用 Stripe Elements → SAQ A-EP

  • 官方 WooCommerce Stripe 插件默认使用 Stripe Elements
  • 卡数据在 Stripe iframe 中采集;你的服务器只会收到支付令牌
  • 这属于 SAQ A-EP(控制要求多于 SAQ A,但远少于 SAQ D)

SAQ A-EP 的 WooCommerce 托管要求: 你的网站托管服务必须满足 PCI 最低要求:

  1. SSL/TLS:确保托管服务提供商使用 TLS 1.2+,并配置最新的证书
  2. 修补:及时更新 WordPress、WooCommerce、插件和 PHP
  3. 托管服务:WP Engine、Nexcess 和 Kinsta 是具备 PCI 意识的托管服务商,并提供相关控制措施
  4. Wordfence:安装 Wordfence Security,用于恶意软件扫描和 WAF 防护(要求 5、6)

WooCommerce PCI 合规核查事项:

  • WooCommerce 订单备注或自定义字段中未记录信用卡号
  • WooCommerce 调试日志不会捕获支付数据(在生产环境中关闭调试日志)
  • 所有管理员账号均使用强度高且唯一的密码,并启用 2FA
  • 所有插件均在安全补丁发布后 30 天内更新

BigCommerce

BigCommerce 是通过 PCI-DSS Level 1 认证的平台。使用 BigCommerce 托管式结账和受支持的支付网关,即属于 SAQ A 范畴。

在 BigCommerce 上完成合规:

  • BigCommerce 会为其平台基础设施提供 AoC
  • 对于使用 BigCommerce Payments 或通过 BigCommerce 结账接入受支持支付网关的商家:适用 SAQ A
  • 对于自定义支付集成或自定义结账页面:范围会扩大;请咨询 QSA

BigCommerce 关键设置:

  1. 前往 Store Settings → Security — 确保所有页面均强制使用 HTTPS
  2. 前往 Account Settings → Users — 确保所有管理员账号都有唯一 ID 和强密码
  3. 在账号安全设置中为管理员账号启用 2FA
  4. 检查已安装的应用 — 仅授予应用所需的最低权限

自定义 / 无头架构

对于自定义店面,PCI 范围取决于你集成支付处理的方式。使用 Stripe Elements 或 Braintree Drop-in UI,将范围控制在 SAQ A-EP 范畴内。

使用 Stripe Elements 实现 SAQ A-EP:

// Client-side: Stripe handles card data in an iframe — your code never sees card numbers
const stripe = await loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY!);
const elements = stripe.elements({ clientSecret });
const paymentElement = elements.create('payment');
paymentElement.mount('#payment-element');

// On submit — Stripe creates a PaymentMethod on their servers
const { error, paymentIntent } = await stripe.confirmPayment({
  elements,
  confirmParams: { return_url: `${window.location.origin}/order-confirmation` },
});
// Your server never receives a card number — only a paymentMethodId or paymentIntentId

SAQ A-EP 的关键控制措施(自定义店面):

# Requirement 4: TLS 1.2+ only, strong cipher suites
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

支付页面的内容安全策略(PCI-DSS v4.0 要求 6.4.3):

// Strict CSP on checkout pages — only authorized scripts allowed
const csp = [
  `default-src 'self'`,
  `script-src 'self' 'nonce-${nonce}' https://js.stripe.com`,
  `frame-src https://js.stripe.com https://hooks.stripe.com`,
  `connect-src 'self' https://api.stripe.com`,
  `object-src 'none'`,
].join('; ');
response.headers.set('Content-Security-Policy', csp);

审计日志(要求 10):

// Log every authentication event, admin action, and access to payment data
interface AuditEntry {
  timestamp: string;
  userId: string;
  userIp: string;
  action: string;
  resource: string;
  outcome: 'success' | 'failure';
}
// Ship logs to an immutable store: CloudWatch Logs, Datadog, or S3 with Object Lock
// Requirement 10.7: Retain logs for 12 months; 3 months immediately available

PCI-DSS 控制措施清单:

要求关键工程任务
要求 3:保护存储的数据不存储原始卡号;仅使用 Stripe/Braintree 令牌
要求 4:加密传输TLS 1.2+;HSTS 标头;不得包含混合内容
要求 6:安全开发在 CI 中进行依赖项扫描(npm audit、Snyk);SAST;清点支付页面上的脚本
要求 7–8:访问控制基于角色的访问控制;唯一 ID;管理员启用 MFA;密码策略
要求 10:日志记录记录所有身份验证事件、管理员操作和 CDE 访问,并包含用户 ID、时间戳和 IP
要求 11:漏洞管理由 ASV 每季度进行外部扫描;每年进行渗透测试

最佳实践

  • 尽量缩小持卡人数据环境(CDE) — 使用托管支付表单以符合 SAQ A 要求,并将控制项从约 330 项减少到约 22 项;这是影响最大的 PCI 决策
  • 绝不存储原始卡号 — 始终使用令牌化;如果你从未接触卡数据,大多数 PCI 要求就不适用于你的服务器
  • 将日志发送到不可变存储 — 使用仅追加的日志目标(带 Object Lock 的 S3、CloudWatch Logs),以防攻击者篡改审计跟踪
  • 强制所有管理员访问启用 MFA — PCI-DSS v4.0 要求 8.4.2 规定,所有访问 CDE 的操作都必须启用 MFA
  • 自动执行漏洞扫描 — 在 CI/CD 中运行依赖项审计,并安排每季度进行 ASV 扫描;手动流程总是容易被遗漏
  • 记录脚本清单 — PCI-DSS v4.0 要求 6.4.3 规定,必须记录支付页面上所有脚本的清单及其业务理由

常见问题

问题解决方案
选择了 SAQ A,却使用 Stripe ElementsStripe Elements(页面上的 JavaScript)属于 SAQ A-EP,而非 SAQ A;只有完全托管的重定向(Stripe Checkout)才符合 SAQ A 要求
生产环境启用了调试日志,导致支付数据被记录在生产环境中禁用 WordPress/WooCommerce 调试日志;WC_DEBUG 和 WP_DEBUG 必须设为 false
负载均衡器仍启用了 TLS 1.0/1.1使用 nmap --script ssl-enum-ciphers -p 443 yourstore.com 验证;在负载均衡器和 CDN 上禁用 TLS 1.0/1.1
未将结账页面上的第三方脚本纳入清单PCI v4.0 要求提供书面清单;使用浏览器开发者工具进行审计;从支付页面移除非必要脚本
没有事件响应计划PCI 要求 12.10.1 规定,必须制定书面的 IR 计划并每年进行测试;即使从未发生过事件,也要制定一份基本计划

相关技能

  • @secure-checkout
  • @fraud-detection
  • @account-security
  • @financial-audit-trail

评论

支持 Markdown