服务端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'
服务端API安全解决方案的更多相关文章
- .Net分布式异常报警系统-客户端及服务端API
客户端 客户端的作用就是捕获未处理异常, 发送异常到服务端. 关于捕获未处理异常的方法参考 http://www.cnblogs.com/youring2/archive/2012/04/25/246 ...
- 安卓推送——个推服务端api使用误区
首先你需要在个推开放着平台上注册你的应用,以及获得以下几个必要的值APPID |APPKEY | MASTERSECRET,本文假设你已经完成上述步骤以及完成客户端SDK的集成. 原理 个推服务端ap ...
- Identity4实现服务端+api资源控制+客户端请求
准备写一些关于Identity4相关的东西,最近也比较对这方面感兴趣.所有做个开篇笔记记录一下,以便督促自己下一个技术方案方向 已经写好的入门级别Identity4的服务+api资源访问控制和简单的客 ...
- JAVA通过http访问其他服务端API
项目要实现这么一个功能,用户通过点击按钮,通过axios来访问python的API(算法,java不好做)得到一个结果存储到数据库并且返回到页面. 但是python不是在tomcat上面运行的,所以不 ...
- 服务端API 工作经验(没有工作的是体会不到的)
1.慢慢了解以下内容 [{xx:xxx,xx:xxx},{xx:xxx,xx:xxx},{xx:xxx,xx:xxx},]-- 数据 data 服务端API 状态代码(01代表成功) message ...
- CMDB学习之五服务端api
服务端api 对发送来的数据进行处理,并返回结果,首先要创建一个Django项目 第一步,就是写URL路由在分支中写url api 主路由 from django.conf.urls import u ...
- C#开发BIMFACE系列6 服务端API之获取文件信息
在<C#开发BIMFACE系列4 服务端API之源上传文件>.<C#开发BIMFACE系列5 服务端API之文件直传>两篇文章中详细介绍了如何将本地文件上传到BIMFACE服务 ...
- C#开发BIMFACE系列4 服务端API之源上传文件
在注册成为BIMFACE的应用开发者后,要能在浏览器里浏览你的模型或者获取你模型内的BIM数据, 首先需要把你的模型文件上传到BIMFACE.根据不同场景,BIMFACE提供了丰富的文件相关的接口. ...
- C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken
系列目录 [已更新最新开发文章,点击查看详细] BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用. BIMFACE ...
随机推荐
- How Not to Crash #2: Mutation Exceptions 可变异常(不要枚举可变的集合)
How Not to Crash #2: Mutation Exceptions 可变异常html, body {overflow-x: initial !important;}html { font ...
- Java通过ssh连接到Linxu和Windos服务器远程启动Tomcat
一.Linxu服务器远程启动tomcat 1.首先确保linxu服务器上的tomcat jdk等必要软件正确安装,并且可以正常启动. 2.编写Java SSH工具类. 相关jar包: <depe ...
- PHP——大话PHP设计模式——魔术方法
- Medium开发团队谈架构设计_转
转自:Medium开发团队谈架构设计 背景 说到底,Medium是个社交网络,人们可以在这里分享有意思的故事和想法.据统计,目前累积的用户阅读时间已经超过14亿分钟,合两千六百年. 我们支持着每个月两 ...
- JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!)
JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!) 1.文件准备: 服务器:CentOS Linux release 7.3.1611 (Core) Apa ...
- hbase 学习(十二)非mapreduce生成Hfile,然后导入hbase当中
最近一个群友的boss让研究hbase,让hbase的入库速度达到5w+/s,这可愁死了,4台个人电脑组成的集群,多线程入库调了好久,速度也才1w左右,都没有达到理想的那种速度,然后就想到了这种方式, ...
- android开发(41) Fragment中使用POP_BACK_STACK_INCLUSIVE达到一次跳转到栈底。类似Activity的 采用FLAG_ACTIVITY_CLEAR_TOP
需求场景: 在开发中遇到下面这样场景: 1.创建 Fragment A 显示. 这时栈的结构是: .Fragment A 2.创建 Fragment B 并 显示. 从下到上看,这时栈的结构是: ...
- Java设计模式(22)命令模式(Command模式)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- The SDK platform-tools version ((23)) is too old to check APIs compiled with API 26;
好像是更新过啥SDK之后,项目一直在包名的那一行显示红线,不过是不报编译错误的,就是看着老扎心老扎心的,开始以为是指定的SDK版本的问题,修改后发现无效,最后找到方法解决: 打开SDK Manager ...
- 超频,如何超频CPU和显卡?
首先是良好的硬件体制,CPU.内存和显卡都必须是健康的,在100%负荷下工作也能拥有合理的温度和功耗.其次就是硬件准备,超频需要一块强大的主板做支撑,特别是主板供电部分,考虑到CPU和内存超频后功耗大 ...