关于小程序session_key漏洞问题的解决2022-12-01
创始人
2024-03-17 02:44:40
0

业务背景:开发了小程序,使用了一段时间以后,小程序提示系统漏洞session_key的问题,在网上找了好多的博客,感觉好多写的没那么清晰,更偏重于理论,导致自己走了很多的弯路,为了更方便快捷的解决问题,我整理了一下解决这个问题的方法,更偏向于实际,没有理论的东西在里面,代码都写了注释,更便于阅读。

下面是官网的提示信息链接:

https://developers.weixin.qq.com/community/minihome/doc/000806202400280b0edd5866156c01?blockType=99&pass_ticket=evb7v4LC5Bza6jlRLzxsRqlC824r61rZJfB%2F9ae0PyrgbDgWUHRY1HRH%2FZ%2B65aKH

问题复现:现在是session_key暴漏在返回的参数中
在这里插入图片描述
修改后,从后端返回的参数如下;只有手机号码和appid,已经把session_key去掉了
在这里插入图片描述

原来获取session_key的方法

 getPhoneNumber(e) {if (e.detail.errMsg == "getPhoneNumber:ok") { //点击了“允许”按钮,//获取用户openidwx.request({//这里的this.data.loginCode 是从wx.login中获取的url: 'https://localhost:8080/getweixinweixin/getOpenId?code=' + this.data.loginCode,method: 'POST',success: res => {//解密获取手机号,从后端获取的openidthis.data.openId = res.data.openid//从后端获取的session_keythis.data.sessionKey = res.data.session_key//根据session_key加密var pc = new WXBizDataCrypt(this.data.appId, res.data.session_key)//解密var phoneData = pc.decryptData(e.detail.encryptedData, e.detail.iv)if (phoneData != null && phoneData != '') {wx.setStorageSync('phone', phoneData.phoneNumber)this.setData({phone: phoneData.phoneNumber})}}})

上面的code(this.data.loginCode,)是从下面的方法中获取的

  //登录wx.login({success: res => {this.data.loginCode = res.code}})
上面的这种方式,会把session_key暴漏在浏览器上面,所以下面是优化的方法,我们不在后端传session_key了,调用新的接口,这个接口中会返回手机号码和appid

现在获取appid和phone的方法,不获取session_key的方法
wx.login这个方法也可以删除了

  getPhoneNumber(e) {if (e.detail.errMsg == "getPhoneNumber:ok") { //点击了“允许”按钮,//获取用户openidwx.request({url: 'http://localhost:8080/getweixin/getOpenId?code=' + e.detail.code,   method: 'POST',success: res => {wx.setStorageSync('phone', res.data.phoneNumber)this.setData({phone: res.data.phoneNumber})

后台调用新接口的方法,可以参考,
第一步:先调用token的接口,获取token
第二步:用获取的token信息和code,调用第二个接口,获取手机号码和appid
接口地址:

//获取token的接口,APPID和APPSECRET需要申请
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
//获取手机号码和aiipId接口,需要传入token和code
https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=

后台Java代码调用示例;可以直接用的那种

 /***小程序获取手机号码和appid*/@PostMapping("/getOpenId")public Map getOpenId(@RequestParam(value = "code", required = false) String code) {String accessTokenUrl = WeixinConstants.accessTokenUrl.replace("APPID", appId).replace("APPSECRET", appSecret);String response_token = HttpRequest.get(accessTokenUrl).timeout(60000).execute().body();JSONObject token = JSON.parseObject(response_token);// 获取tokenString url = WeixinConstants.new_openIdUrl + token.getString("access_token");//Map paramMap = new HashMap<>();paramMap.put("code", code);HttpHeaders headers = new HttpHeaders();HttpEntity> httpEntity = new HttpEntity<>(paramMap, headers);//String response = restTemplate.postForEntity(url, httpEntity, String.class).getBody();//String return_openid = "";String phoneNumber = "";JSONObject json_data= new JSONObject();//判断返回值if(response != null && !"".equals(response)) {//JSONObject jsonObject = JSONObject.parseObject(response);// 获取第一层的数据JSONObject first_data = jsonObject.getJSONObject("phone_info");//获取第二层的数据String phone_number = first_data.get("phoneNumber").toString();json_data.put("phoneNumber",phone_number);////获取第二层的watermark数据JSONObject watermark = first_data.getJSONObject("watermark");//测试获取第三层的数据String appid = watermark.get("appid").toString();json_data.put("appid",appid);}//处理返回的格式Map map = JSON.parseObject(json_data.toString() ,Map.class);return map;}

需要在pom.xml中引入下面的jar包

 cn.hutoolhutool-all5.7.7

暂时梳理这些:有问题欢迎留言交流

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...