背景

项目在进行等保测试时,发现小程序部分接口通过修改接口参数可以获取到部分敏感信息,属于严重漏洞。为了减少代码改动工作量,考虑使用国密SM2对参数进行统一加密后,后端需要解密后再使用。同时考虑到部分响应数据内容过多,如果后端对响应数据也加密,前端解密时间过长影响体验,所以只针对了请求参数加密。

具体实现

一、小程序可配置安全鉴权

微信小程序官方提供了接口通信鉴权体系,使用了数据加密与签名的机制,防止数据泄漏与篡改,且具备不可否认性。开发者可在小程序管理后台 API安全模块,为应用配置密钥与公钥,以此来保障开发者应用和微信开放平台交互的安全性。

安全鉴权模式介绍:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/getting_started/signature-verify.html

服务端api签名指南:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/getting_started/api_signature.html

看完介绍后感觉非常麻烦,而且在社区看到好多加密解密时存在问题。为了减少工作量,尝试选择下面第二种方式。

二、使用sm-crypto

文档地址:https://www.npmjs.com/package/sm-crypto

官方提供了小程序移植版和 java 移植版,如有需要可以参考使用。但因之前项目在管理后台用过,所以就没看文档,直接复制的npm包源码。

官方介绍需要依赖npm构建,因为当前项目没用npm,且只需要SM2,就直接复制了SM2源码放在小程序中。

首先找到源码sm-crypto/src/目录下的sm2文件夹,复制出来放到小程序目录中

在请求拦截中统一进行参数加密操作

const sm2 = require('./sm2/index')// 下面代码要放在请求拦截中if (config.data) {const publicKey = `xxx`   //  提前调用sm-crypto生成的公钥,需要和后端配合好,保证后端私钥和公钥是一对const sm2Data = sm2.doEncrypt(JSON.stringify(config.data), publicKey, 1)  // config.data就是请求参数config.data = encodeURIComponent(sm2Data)
}

这样每次发出的请求参数都会被加密处理,后端接收到后进行对应的解密即可。

微信小程序中的SM2加密相关推荐

  1. 微信小程序中使用md5加密

    微信小程序中有以下需求,密码需要md5加密后的密码. 请求参数 名称 必选/可选 类型 位置 说明 Content-Type 必选 String Header 消息体的媒体类型,必须为"ap ...

  2. 微信小程序中使用 SHA256加密

    1.js文件内容: /** * * Secure Hash Algorithm (SHA256) * http://www.webtoolkit.info/ * * Original code by ...

  3. 微信小程序中用户登录和登录态维护

    微信小程序和以前的web项目不同,他是前后端分离的应用,之前我们的传统登录有web服务器提供Session维护, 后端在返回结果给前端web项目时,带上cookie,且以cookie值为key存储用户 ...

  4. 微信小程序中通过Basic Auth传递token

    npm导入用于Base64加密的工具包js-base64 // package.js "dependencies": {"js-base64": "^ ...

  5. 微信小程序使用crypto.js加密解密

    微信小程序中使用crypto.js crypto.js是用来进行AES加密的 注意AES在使用时有7个配置项,前后端加解密记着统一参数,测试时注意配置项的选择是否一致. 测试工具: AES加密测试工具 ...

  6. 微信小程序登录密码MD5加密

    在小程序中,页面的脚本逻辑是在JsCore中运行,JsCore是一个没有窗口对象的环境,所以不能在脚本中使用window,也无法在脚本中操作组件.zepto/jquery 也无法使用,因为zepto/ ...

  7. 微信小程序 - 引入使用 MD5 加密

    前言 在微信小程序中,有时后端接口可能需要咱们前端加密一些字段,比如密码等敏感数据. 如果您有这个需求,可参考本文完成引入及使用 md5, 例如以下示例,调用一个函数即可完成转换. 666666 =& ...

  8. 微信小程序中如何获取用户手机号授权登录

    随着微信小程序的普及,许多应用程序需要用户登录才能提供更好的服务.而获取用户手机号码是验证用户身份和确保账户安全的重要步骤之一.因此,在本文中,我们将介绍如何在微信小程序中实现手机号授权登录. 步骤一 ...

  9. 使用nginx反向代理在微信小程序中使用http请求

    使用nginx反向代理在微信小程序中使用http请求 由于微信小程序对第三API的请求做了限制官方说明文档,导致我们无法访问非https的请求,然而我们在开发小程序过程中所请求的第三方接口不一定都是h ...

最新文章

  1. 【青少年编程】【三级】计算成绩总和
  2. CF1097D Makoto and a Blackboard(期望)
  3. “神算子”上线!EasyDL时序预测模型零门槛轻松上手
  4. 【MySQL distinct的使用】如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中
  5. libsvm java 调用说明
  6. Velocity语法参考
  7. Linux拓展通配符的使用
  8. linux tomcat 进程杀掉_测试开发人员必备Linux命令
  9. 总有被遗忘或者没有及时跟进的工作
  10. python字符串常见操作_python 字符串常用操作
  11. 海思Hi3519AV100 emmc flash方式 linux系统移植 hitool工具烧写
  12. 计算机科学与ICT技术书籍、资料推荐
  13. stack corruption detected问题探究
  14. 有你智居告诉你,智能门禁是如何做到出入小区只需1秒钟的?
  15. MacOS连接VPN 提醒 “IPSec共享密钥”丢失。请验证您的设置并尝试重新连接。
  16. 合并多个 .ts 文件为单个 .mp4 解决方案
  17. QT 程序运行异常问题总结
  18. SSM网约车管理系统毕业设计源码051630
  19. 蛇形矩阵之逆时针矩阵
  20. Python + Selenium(九)- 解决图片验证码登录或注册问题

热门文章

  1. QueryList是一套简洁、优雅的PHP采集工具(爬虫),基于phpQuery。
  2. c语言函数类型绕口令,编译器视角篇---C语言基础之细节
  3. Java基础-InputStreamReader和OutputSreamWriter
  4. 高阶过程与过程数据化
  5. gis投影中未定义的地理转换_ArcGIS中的坐标系统定义与投影转换(转)
  6. 面试真题:1亿张彩票堆起来有多高?!
  7. 怎样把一段视频中的音乐剪切下来
  8. 【硬见小百科】PCB设计软件简介
  9. python 根据输入的值计算正太分布分位点
  10. Adobe reader 的书签功能