如何防止攻击者窃听你的“秘密”
开发者后端服务调用微信平台 sns/jscode2session接口,用于换取小程序用户登录信息。开发者后端服务调用微信平台 wxa/getwxacode接口,用于获取微信小程序码、小程序开发服务商调用微信开放平台 fastregisterweapp接口,为商家快速注册小程序。......
小程序的服务器域名必须支持 HTTPS 协议,且境内小程序的服务器域名需进行互联网备案。 业务操作权限应在后端服务中确定,不应该放在 API 参数中直接传递。 对每一次调用进行权限校验,确认操作者信息,防止发生越权行为。 不要相信客户端提交的数据,在业务处理前一定要做必要的参数校验。 ......
首先,根据自身业务情况,寻找合适的加密方式:
非对称加密:客户端和服务器维护两组公私加密密钥,每次接口请求时,先对明文数据进行加密,另一方收到密文后用对应的反向密钥解密。常见的非对称加密有 RSA、DSA、ECC,非对称加密安全性高,但加解密速度慢,不太适合请求体或响应体太大的情况。 对称加密:客户端和服务端维护一组密钥,每次接口请求时,对明文数据进行加密,另一方收到时用同样的密钥解密。常见的对称加密有 DES、3DES、IDEA、RC5、RC6、Blowfish,对称加密加解密速度快,适合对大数据做加解密处理,安全性有所下降。 整合方案:请求时,客户端对明文用对称加密方式加密,对称密钥随机生成,然后用非对称加密方式加密前面的对称密钥,最后将密文和加密后的对称密钥内容合并发出;服务端收到时,按照反向流程进行解密,响应包也是相同的处理流程。
Diffie-Hellman 密钥交换算法、公钥基础设施(PKI)小程序加密网络通道
小程序端端通过 wx.getUserCryptoManager().getLatestUserKey获取加密密钥信息发起 wx.request请求时使用第一步得到的加密密钥信息对参数进行加密(加密方法可以自定义)服务端请求服务端接口 wxa/business/getuserencryptkey拿到encryptKey用于解密
API 安全鉴权
在「微信小程序开发后台」和「开发者后端服务」中分别配置加密密钥。 发送微信 api 请求时,「开发者后端服务」使用对应的密钥和加密方式对请求体进行加密 「微信开放平台」收到请求后,使用配置的加密密钥进行解密,处理后再通过密钥加密。 「开发者后端服务」收到请求响应后,使用加密密钥进行解密,获得明文。