安全最佳实践
更新时间:2023.08.21# 适用人群
本文档面向使用微信支付商家转账到零钱 API 的开发者和业务人员。
# 前言
本文档的目的是最大限度地降低风险,保护商户资金安全。商家转账 API 升级了安全防控体系,但是如果商户在集成和使用时出现安全漏洞,仍会造成商户资金损失。因此,我们强烈建议商户开发者严格遵循本文档中的安全指南与最佳实践。
我们相信,商户严格遵循安全最佳实践,合理配置安全策略,采取防御性编程,并持续监控与审计,可以最大限度地减轻风险,保护自己的资金安全。我们衷心希望本文档可以成为您开发与运营过程中安全的重要参考。如有任何安全疑问,请随时与我们联系。
# 主要风险
使用商家转账 API 的商户系统,存在以下主要风险:
- 商户自建系统漏洞
- 商户付款业务逻辑漏洞
- 商户 API 密钥泄露
特别是商户自建系统漏洞容易被黑产团体发现和利用。为了应对这些风险,微信支付提供了一系列的安全防御手段。但是这些措施的有效性还依赖于商户的正确集成与谨慎使用。
# 安全实践
# 验证应答签名
商户系统在接收到微信支付 API 应答时,应始终验证该应答的数字签名。如果签名验证成功,则表明该应答确实来自微信支付。如果不成功,则表明应答有安全风险,不应被商户系统信任。
签名验证是一种重要的安全最佳实践,可以有效防御中间人、重放攻击等威胁。它确保商户系统只处理真实的、未被篡改的、来自微信支付的应答,从而保护系统的稳定和安全。微信支付强烈建议商户系统对所有微信支付 API 验证签名。
# 设定合理的额度
商家转账 API 提供了一组转账额度限制:
- 商户单日转账额度:初始额度10万元。商户管理员可通过商户平台 设置单日转账额度 。
- 商户单笔转账限额:针对不同场景微信支付设置了不同的商户单笔额度,不支持调整。商户应根据业务实际情况 申请合适的使用场景 ,并在 发起批量转账 时传入对应场景 ID。
- 商户单日向单用户转账限额:额度为2万元,不支持调整。
- 转账验密的免密额度:额度最高为2万元。 设置免密额度 后,在免密额度内的转账无需验密管理员确认。
商户运营人员应合理设定商家转账的各个额度,避免设置过大,可有效减少商户侧系统出现安全问题时的资金损失。
# 设置付款来源 IP
在使用商家转账 API 时,必须 设置付款来源 IP 。设置后,仅指定 IP 可调用商家转账 API。该项设置可避免商户 API 密钥泄露后,“坏人”使用陌生 IP 发起调用。
# 关注安全提醒
微信支付会检测商户调用商家转账的异常行为。当检测到异常,将通过以下两种方式通知安全联系人:
- 微信支付客服电话95017
- 微信支付安全中心的“风险监控”消息
商户应将商户系统的安全或研发人员 设置为安全联系人 (opens new window) 。安全联系人应注意接听95017的电话,及时关注、处理风险监控消息。
若商户确认商家转账异常,暂时未排查到具体原因,可考虑先 关闭API发起转账方式 停止 API 接口发起转账。
# 保护敏感信息
当明细转账金额超过2000元时,发起批量转账时需传入加密后的用户姓名。用户姓名属于敏感信息,受到合规限制,商户应将其加密后存储在数据库中。
# 设置收款用户列表
在以下的使用场景中,只允许向 收款用户列表 中的用户转账:
- 佣金报销
- 企业报销
- 企业补贴
- 服务款项
- 采购款项
如果你的业务符合以上场景,请在发起批量转账时指定对应的场景 ID,并将员工或合作伙伴添加为收款用户,以避免给外部用户转账。
# 使用安全医生检测漏洞
安全医生是微信支付提供给商户的一个免费安全服务。它可以帮助商户检测自建系统的漏洞,发现可能影响商户的安全问题,并提供修复建议,为商户资金安全保驾护航。
一旦安全医生检测到问题,它会生成一份报告,报告包含:
- 漏洞的原因
- 风险等级(高中低)
- 漏洞可能造成的影响
- 修复建议
按照报告中的修复建议,商户应完善网站的安全设置,修复系统漏洞,有效降低安全风险,更安全地使用商家转账。
# 安全建议
除了以上实践,商户侧系统需要考虑以下的安全措施:
- 强化商户侧系统的身份认证和权限机制,避免管理员的弱密码
- 严格管理商户 API 密钥,加密或使用云厂商提供的 密钥管理系统 (opens new window) 存储密钥
- 只使用 HTTPS,且采用 TLSv1.2-
- 商户侧转账接口对输入做有效性校验
- 严格限流,对频繁的转账请求设置限流机制
- 强化风控策略,检测可疑的转账
- 强化商户侧转账接口的监控和异常告警
- 强化商户侧系统的审计,并及时修复漏洞
- 职责分离,发起转账的操作员和转账验密人应相互分离