由于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安全解决方案的更多相关文章

  1. .Net分布式异常报警系统-客户端及服务端API

    客户端 客户端的作用就是捕获未处理异常, 发送异常到服务端. 关于捕获未处理异常的方法参考 http://www.cnblogs.com/youring2/archive/2012/04/25/246 ...

  2. 安卓推送——个推服务端api使用误区

    首先你需要在个推开放着平台上注册你的应用,以及获得以下几个必要的值APPID |APPKEY | MASTERSECRET,本文假设你已经完成上述步骤以及完成客户端SDK的集成. 原理 个推服务端ap ...

  3. Identity4实现服务端+api资源控制+客户端请求

    准备写一些关于Identity4相关的东西,最近也比较对这方面感兴趣.所有做个开篇笔记记录一下,以便督促自己下一个技术方案方向 已经写好的入门级别Identity4的服务+api资源访问控制和简单的客 ...

  4. JAVA通过http访问其他服务端API

    项目要实现这么一个功能,用户通过点击按钮,通过axios来访问python的API(算法,java不好做)得到一个结果存储到数据库并且返回到页面. 但是python不是在tomcat上面运行的,所以不 ...

  5. 服务端API 工作经验(没有工作的是体会不到的)

    1.慢慢了解以下内容 [{xx:xxx,xx:xxx},{xx:xxx,xx:xxx},{xx:xxx,xx:xxx},]-- 数据 data 服务端API 状态代码(01代表成功) message ...

  6. CMDB学习之五服务端api

    服务端api 对发送来的数据进行处理,并返回结果,首先要创建一个Django项目 第一步,就是写URL路由在分支中写url api 主路由 from django.conf.urls import u ...

  7. C#开发BIMFACE系列6 服务端API之获取文件信息

    在<C#开发BIMFACE系列4 服务端API之源上传文件>.<C#开发BIMFACE系列5 服务端API之文件直传>两篇文章中详细介绍了如何将本地文件上传到BIMFACE服务 ...

  8. C#开发BIMFACE系列4 服务端API之源上传文件

    在注册成为BIMFACE的应用开发者后,要能在浏览器里浏览你的模型或者获取你模型内的BIM数据, 首先需要把你的模型文件上传到BIMFACE.根据不同场景,BIMFACE提供了丰富的文件相关的接口. ...

  9. C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用. BIMFACE ...

随机推荐

  1. 【计算机网络基础】TCP/IP、HTTP、Socket的概念

    TCP/IP协议是一个协议簇.里面包括很多协议的.UDP也是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.(资料来源: http://www.cnb ...

  2. C语言 · 数的运算

    算法提高 数的运算   时间限制:1.0s   内存限制:512.0MB      输入一个正整数(范围[1..10000]),打印其平方(不保留小数位).平方根.倒数.(用指针实现,保留2位小数,输 ...

  3. C语言 · 字串逆序

    算法训练 字串逆序   时间限制:1.0s   内存限制:512.0MB      问题描述 给定一个字符串,将这个串的所有字母逆序后输出. 输入格式 输入包含一个字符串,长度不超过100,字符串中不 ...

  4. 【html】param 以及 embed 的有关 flash 属性详解

    本文主要介绍 param 和 embed 标签中有关 flash 的一些属性及其属性值. 首先我们需要知道 param 和 embed 标签是单独出现的,而不是成对出现的,下面的代码是一般 flash ...

  5. jQuery(二):jQuery选择器

    jQuery选择器类似于CSS选择器,用来选取网页中的元素.例如: $("h3").css("background-color","red" ...

  6. linq操作符:聚合操作符

    一.Aggregate操作符 Aggregate操作符对集合值执行自定义聚合运算.来看看Aggregate的定义: public static TSource Aggregate<TSource ...

  7. android设置GridView高度自适应,实现全屏铺满效果

    使GridView每个item的高度自适应拉伸,达到整个GridView刚好铺满全屏的效果. public static void setGridViewMatchParent(GridView gr ...

  8. 使用 pv 命令监控 linux 命令的执行进度

    如果你是一个 linux 系统管理员,那么毫无疑问你必须花费大量的工作时间在命令行上:安装和卸载软件,监视系统状态,复制.移动.删除文件,查错,等等.很多时候都是你输入一个命令,然后等待很长时间直到执 ...

  9. 数据规整化:pandas 求合并数据集(交集并集等)

    数据集的合并或连接运算是通过一个或多个键将行链接起来的.这些运算是关系型数据库的核心.pandas的merge函数是对数据应用这些算法的这样切入点. 默认是交集, inner连接 列名不同可以分别指定 ...

  10. WFA 认证 启动 sigma_dut方法

    WFA认证需要启动sigma_dut,记录记录一下启动过程. Android O平台命令如下 adb shell svc wifi disable adb shell rmmod wlan adb s ...