微信小程序-API接口安全详解


Posted in Javascript onJuly 16, 2019

一.接口安全的必要性

最近我们公司的小程序要上线了,但是小程序端是外包负责的,我们负责提供后端接口。这就可能会造成接口安全问题。一些别有用心的人可以通过抓包或者其他方式即可获得到后台接口信息,如果不做权限校验,他们就可以随意调用后台接口,进行数据的篡改和服务器的攻击,会对一个企业造成很严重的影响。

因此,为了防止恶意调用,后台接口的防护和权限校验非常重要。

虽然小程序有HTTPs和微信保驾护航,但是还是要加强安全意识,对后端接口进行安全防护和权限校验。

二.小程序接口防护

小程序的登录过程:

微信小程序-API接口安全详解

  1. 小程序端通过wx.login()获取到code后发送给后台服务器
  2. 后台服务器使用小程序的appid、appsecret和code,调用微信接口服务换取session_key和openid(openid可以理解为是每个用户在该小程序的唯一识别号)
  3. 后台服务器自定义生成一个3rd_session,用作openid和session_key的key值,后者作为value值,保存一份在后台服务器或者redis或者mysql,同时向小程序端传递3rd_session
  4. 小程序端收到3rd_session后将其保存到本地缓存,如wx.setStorageSync(KEY,DATA)
  5. 后续小程序端发送请求至后台服务器时均携带3rd_session,可将其放在header头部或者body里
  6. 后台服务器以3rd_session为key,在保证3rd_session未过期的情况下读取出value值(即openid和session_key的组合值),通过openid判断是哪个用户发送的请求,再和发送过来的body值做对比(如有),无误后调用后台逻辑处理
  7. 返回业务数据至小程序端

会话密钥session_key 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。

session_key主要用于wx.getUserInfo接口数据的加解密,如下图所示:

微信小程序-API接口安全详解

sessionId

在微信小程序开发中,由wx.request()发起的每次请求对于服务端来说都是不同的一次会话。啥意思呢?就是说区别于浏览器,小程序每一次请求都相当于用不同的浏览器发的。即不同的请求之间的sessionId不一样(实际上小程序cookie没有携带sessionId)。

如下图所示:

微信小程序-API接口安全详解

实际上小程序的每次wx.request()请求中没有包含cookie信息,即没有sessionId信息。

但是我们可以在每次wx.request()中的header里增加。

接口防护方法

  • 使用HTTPS防止抓包,使用https至少会给破解者在抓包的时候提高一些难度
  • 接口参数的加密,通过md5加密数据+时间戳+随机字符串(salt),然后将MD5加密的数据和时间戳、原数据均传到后台,后台规定一个有效时长,如果在该时长内,且解密后的数据与原数据一致,则认为是正常请求;也可以采用aes/des之类的加密算法,还可以加入客户端的本地信息作为判断依据
  • 本地加密混淆,以上提到的加解密数据和算法,不要直接放在本地代码,因为很容易被反编译和破解,建议放到独立模块中去,并且函数名称越混淆越难读越安全。
  • User-Agent 和 Referer 限制
  • api防护的登录验证,包括设备验证和用户验证,可以通过检查session等方式来判断用户是否登录
  • api的访问次数限制,限制其每分钟的api调用次数,可以通过session或者ip来做限制
  • 定期监测,检查日志,侦查异常的接口访问

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript语言结构小记(一)
Sep 10 Javascript
JavaScript 用Node.js写Shell脚本[译]
Sep 20 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
Nov 17 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
Aug 01 Javascript
原生js实现简单的链式操作
Jul 04 Javascript
对Angular中单向数据流的深入理解
Mar 31 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
Sep 30 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
Nov 05 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
Apr 10 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 Javascript
Vue常用API、高级API的相关总结
Feb 02 Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
jquery实现垂直无限轮播的方法分析
Jul 16 #jQuery
JavaScript解析JSON数据示例
Jul 16 #Javascript
微信小程序 Storage更新详解
Jul 16 #Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 #Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
Jul 16 #jQuery
JS实现的排列组合算法示例
Jul 16 #Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
Jul 16 #Javascript
You might like
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
php下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
Python素数检测实例分析
2015/06/15 Python
Django框架下在视图中使用模版的方法
2015/07/16 Python
tensorflow识别自己手写数字
2018/03/14 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python读取xlsx的方法
2018/12/25 Python
python 变量初始化空列表的例子
2019/11/28 Python
pymysql模块的操作实例
2019/12/17 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
抄袭同学作业检讨书1000字
2014/11/20 职场文书
工作检讨书怎么写
2015/01/23 职场文书