安全最佳实践

更新时间:2023.08.21

# 适用人群

本文档面向使用微信支付商家转账到零钱 API 的开发者和业务人员。

# 前言

本文档的目的是最大限度地降低风险,保护商户资金安全。商家转账 API 升级了安全防控体系,但是如果商户在集成和使用时出现安全漏洞,仍会造成商户资金损失。因此,我们强烈建议商户开发者严格遵循本文档中的安全指南与最佳实践。

我们相信,商户严格遵循安全最佳实践,合理配置安全策略,采取防御性编程,并持续监控与审计,可以最大限度地减轻风险,保护自己的资金安全。我们衷心希望本文档可以成为您开发与运营过程中安全的重要参考。如有任何安全疑问,请随时与我们联系。

# 主要风险

使用商家转账 API 的商户系统,存在以下主要风险:

  • 商户自建系统漏洞
  • 商户付款业务逻辑漏洞
  • 商户 API 密钥泄露

特别是商户自建系统漏洞容易被黑产团体发现和利用。为了应对这些风险,微信支付提供了一系列的安全防御手段。但是这些措施的有效性还依赖于商户的正确集成与谨慎使用。

# 安全实践

# 验证应答签名

商户系统在接收到微信支付 API 应答时,应始终验证该应答的数字签名。如果签名验证成功,则表明该应答确实来自微信支付。如果不成功,则表明应答有安全风险,不应被商户系统信任。

签名验证是一种重要的安全最佳实践,可以有效防御中间人、重放攻击等威胁。它确保商户系统只处理真实的、未被篡改的、来自微信支付的应答,从而保护系统的稳定和安全。微信支付强烈建议商户系统对所有微信支付 API 验证签名。

# 设定合理的额度

商家转账 API 提供了一组转账额度限制:

商户运营人员应合理设定商家转账的各个额度,避免设置过大,可有效减少商户侧系统出现安全问题时的资金损失。

# 设置付款来源 IP

在使用商家转账 API 时,必须 设置付款来源 IP 。设置后,仅指定 IP 可调用商家转账 API。该项设置可避免商户 API 密钥泄露后,“坏人”使用陌生 IP 发起调用。

# 关注安全提醒

微信支付会检测商户调用商家转账的异常行为。当检测到异常,将通过以下两种方式通知安全联系人:

  • 微信支付客服电话95017
  • 微信支付安全中心的“风险监控”消息

商户应将商户系统的安全或研发人员 设置为安全联系人 (opens new window) 。安全联系人应注意接听95017的电话,及时关注、处理风险监控消息。

若商户确认商家转账异常,暂时未排查到具体原因,可考虑先 关闭API发起转账方式 停止 API 接口发起转账。

# 保护敏感信息

当明细转账金额超过2000元时,发起批量转账时需传入加密后的用户姓名。用户姓名属于敏感信息,受到合规限制,商户应将其加密后存储在数据库中。

# 设置收款用户列表

在以下的使用场景中,只允许向 收款用户列表 中的用户转账:

  • 佣金报销
  • 企业报销
  • 企业补贴
  • 服务款项
  • 采购款项

如果你的业务符合以上场景,请在发起批量转账时指定对应的场景 ID,并将员工或合作伙伴添加为收款用户,以避免给外部用户转账。

# 使用安全医生检测漏洞

安全医生是微信支付提供给商户的一个免费安全服务。它可以帮助商户检测自建系统的漏洞,发现可能影响商户的安全问题,并提供修复建议,为商户资金安全保驾护航。

一旦安全医生检测到问题,它会生成一份报告,报告包含:

  • 漏洞的原因
  • 风险等级(高中低)
  • 漏洞可能造成的影响
  • 修复建议

按照报告中的修复建议,商户应完善网站的安全设置,修复系统漏洞,有效降低安全风险,更安全地使用商家转账。

# 安全建议

除了以上实践,商户侧系统需要考虑以下的安全措施:

  • 强化商户侧系统的身份认证和权限机制,避免管理员的弱密码
  • 严格管理商户 API 密钥,加密或使用云厂商提供的 密钥管理系统 (opens new window) 存储密钥
  • 只使用 HTTPS,且采用 TLSv1.2-
  • 商户侧转账接口对输入做有效性校验
  • 严格限流,对频繁的转账请求设置限流机制
  • 强化风控策略,检测可疑的转账
  • 强化商户侧转账接口的监控和异常告警
  • 强化商户侧系统的审计,并及时修复漏洞
  • 职责分离,发起转账的操作员和转账验密人应相互分离

# 进一步阅读