API接口手工防御被恶意调用和接口被攻击
通常情况下的api接口防护有如下几种:
在开发web端程序时,如果你的服务是放在外网的,你是无法完全阻止别人模拟客户端来调用你的web api的。因为你的所有前端代码用户都能直接或间接的看到。 而在开发小程序项目时,前端的小程序代码是上传到微信服务器的,其他人想要直接看到或拿到源代码的难度较大,因此小程序端相对安全些; 为什么要做接口防护和权限校验?有时候,黑客通过抓包或者其他方式即可获得到后台接口信息,如果不做权限校验,黑客就可以随意调用后台接口,进行数据的篡改和服务器的攻击。因此,为了防止恶意调用,后台接口的防护和权限校验非常重要。 小程序如何进行接口防护?要进行小程序的接口防护,首先需要了解小程序的登录过程,如下图所示 整个的流程如下:
ps:会话密钥session_key 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。 session_key主要用于wx.getUserInfo接口数据的加解密,如下图所示 什么是sessionId? 在微信小程序开发中,由wx.request()发起的每次请求对于服务端来说都是不同的一次会话。啥意思呢?就是说区别于浏览器,小程序每一次请求都相当于用不同的浏览器发的。即不同的请求之间的sessionId不一样(实际上小程序cookie没有携带sessionId)。 如下图所示: 实际上小程序的每次wx.request()请求中没有包含cookie信息,即没有sessionId信息。 那么我们能否实现类似浏览器访问,可以将session保存到后台服务器呢? 答案是肯定的。我们可以在每次wx.request()中的header里增加 ##?java的写法,Jsessionid只是tomcat的对sessionId的叫法,其实就是sessionId?
?
header:{'Cookie':?'JSESSIONID='?+?sessionId}?
?
##?thinkjs3.0?的写法?
?
'thinkjs='?+?sessionId}?
效果如下图所示: 在thinkjs3.0的后台代码中,sessionId被保存到了cookie里,可以通过 const?session_id?=?this.cookie('thinkjs')?
提取到sessionId的值 具体ThinkJS的实现代码 首先创建sever端的代码,如下图所示( cd到根目录,运行: thinkjs?new?server?
创建后台代码 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |