服务端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 ...
随机推荐
- hystrix服务降级和服务熔断的区别
故事的背景是这样的:由于小强在工作中碰到一些问题,于是想请教一下业界大牛小壮.于是发生了下面的两个场景: 小强在拿起常用手机拨号时发现该手机没有能够拨通,所以就拿出了备用手机拨通了某A的电话,这个过程 ...
- mac 系统中vim安装ctags插件
1,mac自带的ctags程序不是exuberant ctags, 所以使用时会出现问题,所以要重新安装一个: brew install exuberant ctags 安装完, which ctag ...
- CACTI命令行添加DEVICE/GRAPH/TREE
有时要加入大量的机器到 Cacti ,直接修改 Cacti 还是很复杂的.所以最好还是通过他本身提供的工具来实现. Cacti 早就为我们想到过这个问题了.这些工具就在 cacti/cli 目 ...
- 【C#公共帮助类】JsonHelper 操作帮助类
四个主要操作类:JsonConverter .JsonHelper .JsonSplit .AjaxResult 一.JsonConverter: 自定义查询对象转换动态类.object动态类转换js ...
- MySQL的MVCC
基本概念 Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问:在编程语言中实现事务内存. ...
- <[成长股基本面]【怎样选择成长股】>读书笔记
书在这里 投资想赚大钱,必须有耐性 这家公司的产品或服务有没有充分的市场潜力,至少几年内营业额能否大幅成长? 为了进一步提高总体销售水平,发现新的产品增长点,管理层是不是决心继续开发新产品或新工艺? ...
- Shuffle机制
一个map task处理一个切片Split,切片是一个范围的数据,和blocksize大小没有必然关系. 1.每个map有一个环形内存缓冲区,用于存储任务的输出.默认大小100MB(io.sort.m ...
- Extjs4.x Ext.tree.Panel 遍历当前节点下的所有子节点
Ext.define('WMS.controller.Org', { extend: 'Ext.app.Controller', stores: ['OrgUser', 'OrgTree'], mod ...
- dapper支持操作函数和事物
dapper除了支持基础的CURD.存储过程以外,还支持操作函数和事物. dapper操作函数的代码如下: using Dapper; using System; using System.Colle ...
- jquery miniui 学习笔记
1.取组件值 传递form data,load发送 请求加载数据 <script type="text/JavaScript"> mini.parse(); // ...