关于session_key安全问题的解决方法

简介: 这是一个关于 session_key 安全问题的通知,简单的解释一下,这个 session_key 是一个会话的密钥,用于保证小程序和服务器之间的内容传输的安全,例如当你想获取到用户的某些开放数据时,必须使用这个 session_key 对传输的内容进行校验和解密。

嗨!大家好,我是小蚂蚁。


如果你之前看过我写的与云开发有关的系列教程,并且在自己的游戏中进行了应用。那么,这几天将会在小程序的后台看见如下的通知。



这是一个关于 session_key 安全问题的通知,简单的解释一下,这个 session_key 是一个会话的密钥,用于保证小程序和服务器之间的内容传输的安全,例如当你想获取到用户的某些开放数据时,必须使用这个 session_key 对传输的内容进行校验和解密。


之所以收到这个通知,是因为在请求或者响应的数据中包含了“session_key”的明文,啥叫明文呢?就是如果这个传输的数据被其他人截取的话,就可以直接从数据中看到“session_key”的字样,就很容易得到这个“session_key”。就好像你在自己的行李箱密码锁的旁边挂上了一张写着密码“123”的牌子,让人一看便知。


官方的建议是如果你要使用这个“session_key”,就需要对其进行加密和解密处理,这样别人即使获取到了传输的数据,也很难得知其中的内容。就好像你还是在自己的行李箱密码锁旁边挂着一张写着密码的牌子,只不过牌子上写的不是“123”,而是“你大爷”,当然只有你才知道“你大爷”解密之后是“123”。


在你的小程序的通信过程中明文传输了“session_key”,这个会带来很大风险,所以你要进行修改以消除这种风险,这就是这则通知要告诉我们事情了。


但是,回顾了我的小游戏中对于云开发的使用,好像从来没有用过这个“session_key”,那么,这个到底是在哪里被传输的呢?


本来通过“登陆凭证校验”,我们只需要获得 openid 就可以了。但是在云函数中我将整个返回值(其中包含了session_key)的 JSON 都传回给小程序端了,所以就导致了返回的内容中包含了明文传输的“session_key”。

修改起来也很简单,我们只需要修改一下对应的云函数(login)即可,让它只返回一个 openid,不返回其它的内容。

const cloud = require('wx-server-sdk')
const request = require('request')
// 初始化 cloud
cloud.init({
    // API 调用都保持和云函数当前所在环境一致
    env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
    var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=你的APPID&secret=你的SECRET&js_code=' + event.queryStringParameters.code + '&grant_type=authorization_code';
    return new Promise((resolve, reject) => {
        request(url, function (error, response, body) {
            if (response && response.statusCode === 200) {
                /*删除原来的这一行返回代码*/
                //resolve(body);
                /*使用下面的这行返回,这里只返回我们需要的openid*/
                resolve({openid:(JSON.parse(body)).openid});
            } else {
                 reject(error);
            }
        });
    });
}


如图,需要修改的只有一行代码,将原来的返回全部内容的代码删掉,修改为只返回“openid”的代码。修改之后,保存一下你的云函数即可。


小游戏端无需修改,也无需更新,因为它依旧能够正常的获取到“openid”。


今天的内容就到这里了,如果你的小程序收到了这个安全问题通知,就尽快的去修改一下云函数(login)中的那句导致问题的代码吧!





我是会做游戏也会教你做游戏的小蚂蚁,想学习做游戏的话,关注我的公众号就对啦!


相关文章
|
存储 域名解析 负载均衡
负载均衡是什么,负载均衡有什么作用
负载均衡是什么,负载均衡有什么作用
|
5月前
|
存储 缓存 弹性计算
2026年阿里云 8 核 16G 云服务器解析测评:实例特性、收费标准与成本优化
阿里云 8 核 16G 云服务器作为中高端配置代表,覆盖计算型、通用算力型、AMD 专属型等多类实例,适配企业高并发服务、大数据处理、中型数据库等核心场景。不同实例依托差异化硬件架构与性能优化,满足从中小企业核心业务到大型企业轻量负载的多元需求,同时通过时长折扣、实例选型差异实现成本可控。本文结合实例特性、收费体系及省钱策略,为用户提供客观选型参考。
|
Java Linux 开发工具
用sdkman管理多个jdk切换
【10月更文挑战第13天】SDKMAN 是一个用于在基于 Unix 的系统(如 Linux 和 macOS)上管理多个软件开发工具包(SDK)版本的工具,特别适用于管理不同版本的 JDK。通过 SDKMAN,开发者可以轻松安装、切换和设置默认 JDK 版本,提高开发效率。安装后,可以通过 `sdk list java` 查看可用版本,使用 `sdk install java` 安装特定版本,并通过 `sdk use java` 切换版本。此外,还可以设置默认 JDK 版本,确保新终端会话中自动使用指定版本。验证版本切换是否成功,只需运行 `java -version` 命令即可。
1875 1
|
11月前
|
JSON 搜索推荐 API
小红书笔记详情API响应数据解析
小红书开放平台提供笔记详情API,支持获取笔记内容、互动数据及用户信息,适用于品牌营销与市场分析。接口支持HTTP GET/POST请求,返回JSON格式数据。需申请权限并替换参数如note_id与access_token。附Python请求示例,建议添加异常处理。
|
Java Linux iOS开发
如何配置 Java 环境变量:设置 JAVA_HOME 和 PATH
本文详细介绍如何在Windows和Linux/macOS系统上配置Java环境变量。
20841 12
|
传感器 运维 监控
|
安全 网络安全 网络架构
【揭秘】大佬如何玩转内网与外联单位互访?SNAT+DNAT实战揭秘,让你的网络畅通无阻!
【8月更文挑战第19天】内网与外联单位间的访问是企业网络的关键需求。通过SNAT和DNAT技术可巧妙解决此问题。SNAT修改源IP地址,隐藏内网真实身份;DNAT改变目的IP地址,实现外部对内网服务器的访问。
620 0
uni-app 事件传值 | this.$emit、uni.$emit 区分
uni-app 事件传值 | this.$emit、uni.$emit 区分
1035 0
|
安全 Java UED
Header Location重定向机制解析与应用
Header Location重定向机制解析与应用

热门文章

最新文章