最近做公司的项目,要求实现在数据传输过程中进行加密。本来准备要用HTTPS进行传输 。由于项目采用的是Vue.js框架。结合http是无状态的会话,需要把用户的口令保存到本地。历史遗留原因,并没有把口令存储到cookie中,保存在SessionStorage中。暴露了Token,很容易被其他人拿走Token实现跨站攻击。
公司要求每次传输数据要随机变化。不能暴露Token。即使拿到Token也无法对网站进行攻击。F12不能看到传输的明文数据。
所以结合后端 采用AES加密。
使用crypto.js 在axios 的transformRequest中对请求对象进行Aes加密。
此处需要注意,因为有些情况是不需要加密的,所以返回的data应该为string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams中的一种。但是此处应该要注意的是 string类型要用QueryString.stringify而不是JSON.Stringify否则会在请求的数据后面增加 一个'':';
对于服务器返回的数据,要用JSON.parse解析而不是用querystring.parse解析,否则解析的是简单对象外加空格回车。这是两个坑。
下面贴上代码:
顶部引入crypto-js
加密解密的具体实现。其中zbzbxConfig为系统的定义的配置文件
网友评论