安全与风控
处理信用卡支付数据时如何满足 PCI DSS 合规并使用…
在构建或审计支付连接器、处理信用卡/借记卡数据或实现 Secure Proxy 流程时,确保不存储、不记录、不直连收单方,避免 PCI 违规。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
处理信用卡支付数据时如何满足 PCI D特定
解决思路
- 判断连接器是否托管在非 PCI 环境(包括所有 VTEX IO 应用):若是,必须使用 Create Payment 请求中的 secureProxyUrl 与收单方通信,绝不能直接用原始卡数据调用收单方。
- 检查 Create Payment 请求中是否存在 secureProxyUrl:若存在,说明 Secure Proxy 已激活,必须使用它。
- 若连接器拥有 PCI DSS 认证(由 QSA 签署的 AOC),可直接用原始卡数据调用收单方。
- 通过 Secure Proxy 调用收单方时,在请求头中设置 X-PROVIDER-Forward-To 为收单方 API URL,自定义收单方请求头以 X-PROVIDER-Forward- 为前缀(代理会剥离该前缀)。
- 在发往 Secure Proxy 的请求体中使用令牌字段:card.numberToken、card.holderToken、card.cscToken,代理会在转发给收单方前将其替换为真实数据。
- 仅允许存储 card.bin(前 6 位)、card.numberLength 和 card.expiration;禁止存储完整卡号、CVV/CSC、持卡人姓名或任何令牌值到数据库、文件、缓存、会话存储等持久化介质。
- 禁止将卡号、CVV/CSC、持卡人姓名或令牌值记录到任何日志系统(console、文件、监控、错误追踪、APM),即使调试或开发环境也不行;使用脱敏工具仅记录非敏感字段。
- 区分授权与授权后操作:secureProxyUrl 仅出现在 Create Payment(授权)请求中;cancel、capture、settle、refund 不携带卡数据,必须直接调用 PSP API,使用 ExternalClient 和 outbound-access 策略,不要使用 SecureExternalClient 或引用 secureProxyUrl。
- 采用双客户端架构:授权使用 SecureExternalClient 并通过 secureProxy 参数调用;授权后操作使用 ExternalClient 直接调用收单方 API。
- 在无头店面中,Send payments information 调用(POST https://{account}.vtexpayments.com.br/api/pub/transactions/{tid}/payments)必须从购物者浏览器或原生应用发起,商户 BFF(Node、Next.js 路由、边缘函数、lambda、反向代理等)不得接收或转发卡字段到 Payment Gateway,即使脱敏、即使使用 appKey/appToken 也不行。
- BFF 应仅暴露 /api/bff/order/place(返回 transactionId、orderGroup、merchantName)和 /api/bff/order/process(调用 /api/checkout/pub/gatewayCallback/{orderGroup},不含卡数据),绝不暴露转发卡字段到 vtexpayments.com.br 的端点。
- 实现安全日志工具,仅记录 paymentId、paymentMethod、value、currency、orderId、hasCard、hasSecureProxy、cardBin 等非敏感字段,省略其余所有字段。
- 实现脱敏工具,在记录请求体前将 card 对象替换为仅含 bin、numberLength、expiration 的安全对象。
- 构建收单方请求时,根据模式选择字段:若 Secure Proxy 激活则用 card.numberToken ?? card.number、card.holderToken ?? card.holder、card.cscToken ?? card.csc;若 PCI 认证则用原始值。
- 检测 Secure Proxy 模式:通过检查 Create Payment 请求中是否存在 secureProxyUrl 字段(isSecureProxyActive 函数返回 !!req.secureProxyUrl)。
- 在代码审查中检查:连接器是否在 secureProxyUrl 存在时使用它;SecureExternalClient 是否仅用于 Create Payment;授权后操作是否使用 ExternalClient 直连;X-PROVIDER-Forward-To 是否设置为收单方 API URL;自定义头是否以 X-PROVIDER-Forward- 为前缀;是否仅存储 card.bin、card.numberLength、card.expiration;卡号、CVV、持卡人姓名和令牌值是否从所有日志中排除;是否有脱敏工具;连接器是否同时支持 Secure Proxy(非 PCI)和直连(PCI 认证)模式;错误响应日志是否不包含收单方请求体(含令牌)。
适用边界 · 注意事项
- 不要将本技能用于 PPP 端点契约和响应结构——应使用 payment-provider-protocol 技能。
- 不要将本技能用于幂等性和重复预防——应使用 payment-idempotency 技能。
- 不要将本技能用于异步支付流程(Boleto、Pix)和回调——应使用 payment-async-flow 技能。