欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

小程序API接口攻击防护 微信小程序 网站后台 防止批量攻击 有大用

为什么要做接口防护和权限校验?

有时候,黑客通过抓包或者其他方式即可获得到后台接口信息,如果不做权限校验,黑客就可以随意调用后台接口,进行数据的篡改和服务器的攻击。因此,为了防止恶意调用,后台接口的防护和权限校验非常重要。

小程序如何进行接口防护?

要进行小程序的接口防护,首先需要了解小程序的登录过程,如下图所示(参考:https://developers.weixin.qq.com/miniprogram/dev/api/api-login.html)        

alt        

整个的流程如下:        

  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. 返回业务数据至小程序端

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

session_key主要用于wx.getUserInfo接口数据的加解密,如下图所示(参考:https://developers.weixin.qq.com/miniprogram/dev/api/signature.html#wxchecksessionobject)        

alt        

什么是sessionId?

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

如下图所示:

alt        

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

那么我们能否实现类似浏览器访问,可以将session保存到后台服务器呢?

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

## java的写法,Jsessionid只是tomcat的对sessionId的叫法,其实就是sessionId
 header:{'Cookie': 'JSESSIONID=' + sessionId}
       
## thinkjs3.0 的写法
 header:{'Cookie': 'thinkjs=' + sessionId}
       

效果如下图所示:

alt        

在thinkjs3.0的后台代码中,sessionId被保存到了cookie里,可以通过

const session_id = this.cookie('thinkjs')
       

提取到sessionId的值

具体ThinkJS的实现代码

首先创建sever端的代码,如下图所示(如何安装ThinkJS参考:https://www.daguanren.cc/post/thinkjs_installation.html)        

cd到根目录,运行:

thinkjs new server
       

创建后台代码

alt        

完整示例代码请浏览: https://github.com/haodalong/daguanren-wxapp-demo (记得给小星星哦)

更多防护手段请参考API接口如何防止被恶意调用?        

本文链接:https://www.daguanren.cc/post/api_encrypt.html    

-- EOF --

作者 daguanren 发表于 2018-06-04 19:50:02 ,添加在分类 技术分享 下 ,并被添加「 小程序 用户信息 小程序登录过程 」标签 ,最后修改于 2018-06-28 22:22:59        

版权归本网站的作者所有,转载请注明出处,谢谢大家。 问题咨询和商务合作请发送邮件至daguanren.cc@foxmail.com。 如果大家觉得文章不错,还可以通过以下支付宝和微信的方式请作者喝杯咖啡~


来自  https://www.daguanren.cc/post/api_encrypt.html

普通分类: