背景

项目在进行等保测试时,发现小程序部分接口通过修改接口参数可以获取到部分敏感信息,属于严重漏洞。为了减少代码改动工作量,考虑使用国密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. 最近看的篇文章,年过三十,感触很深
  3. 脉冲宽度调制pdm_NHWYM脉冲硬质氧化电源-高压脉冲电源-双极性脉冲电源品牌-济南能华...
  4. 【PC工具】更新文件夹多文件群体比较工具WinMerge
  5. 计算机软件基础-(软件开发过程管理)
  6. 商品详细信息的代码html_Web前端,你该有的代码规范
  7. mysql索引原理剖析
  8. 一机双平面、TCP半连接攻击——SYN攻击详解
  9. MyEclipse中流程定义文件保存时自动生成流程图
  10. LRU最少最近使用缓存策略
  11. map文件分析 stm32_浅谈STM32的启动过程
  12. C++学习008-delete与delete[]的差别
  13. FDDB评估工具使用
  14. linux 虚拟启动失败,kvm虚拟机启动失败
  15. 我做过的本职之外的事情
  16. MongoDB 极简实践入门
  17. NTSC色域(CIE1931)计算公式
  18. Python之Split函数
  19. 最新全套web前端开发VIP40g项目实战
  20. 记某环境SqlServer异地备份的坑(Server权限管控贼拉严格)

热门文章

  1. pear 安装工具包
  2. Python web框架flask
  3. 掌握自动化部署,拿下DevOps半壁江山还远吗?
  4. 6个好用的企业管理软件推荐
  5. CAD二次开发--如何获取图面“组”对象及其内部实体(以南方CASS居民地-房屋为例)
  6. 网格在平面设计中有什么作用
  7. 《创意特训营——30天超级灵感唤醒术》—第2章2.5节隐藏的第三个条件:行动...
  8. Java练习题——数字计算
  9. 连锁餐饮分账怎么做才更加合规高效?
  10. sql主键删除/sql主键修改