Uni-App - 实战《悦读》之API接口安全策略 - 签名策略
发布日期:2021-06-30 23:55:31
浏览次数:2
分类:技术文章
本文共 2244 字,大约阅读时间需要 7 分钟。
安全概述
前面章节讲解的接口是裸露的、不安全的!使用post、get模拟可以轻松对api进行请求,最简单的攻击就可以瞬间完成近万会员的注册!
所以在进行api接口通讯的同时我们应该进行数据的验证工作!
加密原理及流程
1、从服务器端获取一个唯一性的token,我们称之为 accessToken;
2、前端对accessToken进行随机性拆分及md5加密,产生签名(保存在本地存储中); 3、前端在与后端进行交互时传递签名; 4、后端接收数据是验证签名。
签名准备
1、在 commons 文件夹内创建
1.1 md5.js //js md5 加密 [ 在课程内获取此 js文件 ]
1.2 sign.js // 签名函数
sign.js
var md5 = require('./md5.js');module.exports = { sign : function(apiServer){ // 环境判断非uni环境不支持 if(!uni){return '...';} // 连接服务器获取一个临时的accessToken uni.request({ url: apiServer+'getAccessToken', method: 'GET', success: res => { if(res.data.status != 'ok'){return ;} var data = res.data.data; // 对 accessToken 进行md5加密 var accessToken = md5.hex_md5(data.token + data.time); // 签名 = md5(accessToekn + time) + '-' + 'accessToekn'; var sign = accessToken + '-' + data.token; //console.log(sign); // 记录在本地 uni.setStorage({ key:"sign", data:sign }); } }); }}
数据库
DROP TABLE IF EXISTS `yuedu_access_tokens`;CREATE TABLE `yuedu_access_tokens` ( `token` varchar(30) NOT NULL, `time` int(11) DEFAULT NULL, PRIMARY KEY (`token`)) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
php 端代码
uniqid(), 'time' => time() ); $db->add($token); exit(jsonCode('ok', $token)); }}
使用说明
在数据提交页面提交之前进行预签名,提交数据时携带此签名!
更合理的签名保存
因为大家后端基础不一样,本课程使用数据库保存了accessToken,更好的方式是 redis 或 memcache,可以设置变量有效期并能自动失效!
在登录环节使用签名验证策略
后端验证签名原理
// 签名验证function checkSign(){ if(empty($_POST['sign'])){exit(jsonCode('error', 'sign error'));} $sign = explode('-', $_POST['sign']); if(count($sign) != 2){exit(jsonCode('error', 'sign error'));} $db = \hsTool\db::getInstance('access_tokens'); $token = $db->where('token = ?', array($sign[1]))->fetch(); if(empty($token)){exit(jsonCode('error', 'sign error'));} $signMd5 = md5($token['token'].$token['time']); if($signMd5 != $sign[0]){exit(jsonCode('error', 'sign error'));} // 验证成功则删除 $db->where('token = ?', array($sign[1]))->delete();}
登录页面签名机制改进
转载地址:https://lux-sun.blog.csdn.net/article/details/87880146 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月07日 20时39分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Spring Boot 安全框架 Shiro 入门
2019-05-01
如何用一句话激怒互联网人?
2019-05-01
用 Python 爬了点你们喜欢的电影
2019-05-01
推荐一位川大零基础转行 Python 的人生勇士
2019-05-01
讲真,做Python一定不要只会一个方向!
2019-05-01
Python 2大限来了!113天后自生自灭,官方不再维护更新
2019-05-01
GitHub 热榜第一的 Python 抢票神器!节假日能用上
2019-05-01
1.6w 星开源项目,但作者月薪却不到 5K
2019-05-01
Python解惑之:整数比较
2019-05-01
Python解惑之:True与False
2019-05-01
你要的微信小程序终于来了
2019-05-01
我的2016书单
2019-05-01
冷眼看小程序
2019-05-01
为什么执行 x in range(y) 如此快?
2019-05-01
看完这篇文章你还不理解 Python 装饰器,只有一种可能...
2019-05-01
Python干货:表达式 i += x 与 i = i + x 等价吗?
2019-05-01
有了这些 Chrome 插件,效率提升10倍(建议收藏)
2019-05-01
Python 编码错误的本质原因
2019-05-01
Python 开发者都会遇到的错误:UnboundLocalError
2019-05-01
用 Python 送“爱心”
2019-05-01