服务端API安全解决方案
由于server端和client端需要通信,所以api的安全性需要保证
1.完全开放的
一般只是查询,不能执行增、删、改的操作
裸奔的
<?php public function getGoodsList($params) { $where = [ 'cat_id'=>$params['cat_id'] ]; $goods = M('Goods')->where($where)->select(); return json_encode($goods); }
2.参数加密
参数按照规则生成sign
<?php public function getUserInfo($params, $appKey, $sign) {$currentSign = $this->getSign($appKey, $params); if($sign !== $currentSign) { return "签名不合法"; } $where = ['id'=>$params['id']]; $user = M('User')->where($where)->select(); return json_encode($user); }
3.参数加密+时效性验证
<?php public function getUserInfo($params, $appKey, $sign, $timestamp) { //判断请求是否过期---假设过期时间是20秒 $request_time = getDateTimeByTicks($timestamp); if(($request_time + 20) < $_SERVER["REQUEST_TIME"]) { return "接口过期"; } $currentSign = $this->getSign($appKey, $params); if($sign !== $currentSign) { return "签名不合法"; } $where = [ 'id'=>$params['id'] ]; $user = M('User')->where($where)->select(); return json_encode($user); }
4.参数加密+时效性验证+私钥
<?php public function updateUserInfo($params, $appKey, $sign, $timestamp) { $requestTime = getDateTimeByTicks($timestamp); if(($requestTime + 20) < $_SERVER["REQUEST_TIME"]) { return "接口过期"; } // 根据appkey查库获取appSecret值 $appSecret = M('Setting')->where(['appKey'=> $appKey])->getField('appSecret'); //检验签名是否合法 $currentSign = $this->getSign($appKey, $appSecret, $params); if($sign !== $currentSign) { return "签名不合法"; } $where = ['id'=>$params['id']]; unset($params['id']); $data = M('User')->where($where)->save($params); return json_encode($data); }
5.参数加密+时效性验证+私钥+Https
为了提高安全性,再增加https的双向验证模式
生成签名的方法:
(1)对除签名外的所有请求参数按key做生序排列
如:age=18,name=123,timestamp=123456
(2)把参数名和参数值连接成字符串
如:age18_name123_timestamp123456
(3)用申请到的appkey连接到拼装字符串头部和尾部,然后进行32位MD5加密,将到得MD5加密摘要转化成大写
如:appkey='bb',md5('bbage18_name123_timestamp123456bb')
sign='3FFDD2399A23FB7B5D6D99AA84F9A6E3'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2017-11-23 Windows上使用sqlite3
2016-11-23 在 Linux 中查看时区
2015-11-23 Yii日志记录Logging