PHP开发中保证接口安全
模拟客户端请求:
<?php namespace Home\Controller; use Think\Controller; class ClientController extends Controller{const TOKEN = 'API'; //模拟前台请求服务器api接口 public function getDataFromServer(){//时间戳 $timeStamp = time(); //随机字符串 $randomStr = $this -> createNonceStr(); //生成签名 $signature = $this -> arithmetic($timeStamp,$randomStr); //url地址 $url = "http://www.tp3.com/Home/Server/respond/t/{$timeStamp}/r/{$randomStr}/s/{$signature}"; $result = $this -> httpGet($url); dump($result); }//curl模拟get请求。 private function httpGet($url){$curl = curl_init(); //需要请求的是哪个地址 curl_setopt($curl,CURLOPT_URL,$url); //表示把请求的数据以文件流的方式输出到变量中 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $result = curl_exec($curl); curl_close($curl); return $result; }//随机生成字符串 private function createNonceStr($length = 8) {$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) {$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); }return "z".$str; }/** * @param $timeStamp 时间戳 * @param $randomStr 随机字符串 * @return string 返回签名 */ private function arithmetic($timeStamp,$randomStr){$arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小写顺序排序 sort($arr,SORT_STRING); //拼接成字符串 $str = implode($arr); //进行加密 $signature = sha1($str); $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; } }
服务端响应请求:
<?php namespace Home\Controller; use Think\Controller; class ServerController extends Controller{const TOKEN = 'API'; //响应前台的请求 public function respond(){//验证身份 $timeStamp = $_GET['t']; $randomStr = $_GET['r']; $signature = $_GET['s']; // $signature 客户端请求地址中携带的签名,与服务端生成的签名进行比对 $str = $this -> arithmetic($timeStamp,$randomStr);//$str 服务端根据客户端请求过来的数据生成的签名 if($str != $signature){echo "-1"; exit; }//模拟数据 $arr['name'] = 'api'; $arr['age'] = 15; $arr['address'] = 'zz'; $arr['ip'] = "192.168.0.1"; echo json_encode($arr); }/** * @param $timeStamp 时间戳 * @param $randomStr 随机字符串 * @return string 返回签名 */ public function arithmetic($timeStamp,$randomStr){$arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小写顺序排序 sort($arr,SORT_STRING); //拼接成字符串 $str = implode($arr); //进行加密 $signature = sha1($str); $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; } }
服务端根据客户端传递过来的时间戳和随机字符串,来按照约定好的生成签名的算法生成签名,并与客户端传递过来的签名进行对比
如果相同,则返回数据,如果不相同,则不返回数据
PHP开发中保证接口安全相关推荐
- Java开发中模拟接口工具moco的使用
场景 在开发中需要依赖一些接口,比如需要请求一个返回Json数据的接口,但是返回Json数据的接口要么是没搭建,要么是交互比较复杂. 此时,就可以使用moco来模拟接口返回接口数据,以便开发和测试工作 ...
- android开发接口调用,Android开发中webService接口调用示例
代码示例: package com.study.ws; import java.io.IOException; import org.ksoap2.SoapEnvelope; import org.k ...
- Python开发中的接口详解和使用方法
在服务器环境实际开发过程中,往往要通过写接口来请求或者发送数据,那么到底什么是接口,如何通过调用接口发送或者请求数据呢? 一.接口的定义 简单来说,域名(地址)带上参数就是一个接口,然后通过调用此接口 ...
- 学习android开发中遇到的一些小问题
菜鸟的学习笔记: (好多时候想着记录一下自己花了好长时间解决的问题,但是一直没有行动,某一天觉得记录这种事情还是有意义的,虽然中间的记录断断续续,也有时候忘记了记录,觉得记录一下也是自己的积累.) 1 ...
- C# 类中继承接口的属性
在开发中面对接口编程,有时需要将属性放到接口中,但是在类中又要如何去继承接口的属性呢? 开始的时候,我以为只要继承了接口,就可以将属性拿来用了.代码如下: public interface IA {i ...
- C#中理解接口以及接口的作用
在C#的开发中,接口是非常重要也非常好用的.可是很多时候很多人都不是很了解接口的做用,以及该如何使用.下面我们就来理解接口的作用,并看看如何使用吧. 假设我们公司有两种程序员:VB程序员,指的是用VB ...
- angular开发中对请求数据层的封装
代码地址如下: http://www.demodashi.com/demo/11481.html 一.本章节仅仅是对angular4项目开发中数据请求封装到model中 仅仅是在项目angular4项 ...
- 开发中是如何保证接口幂等性的?
文章目录 一.定义 二.业务场景 三.保证幂等性常用方法 方案1: insert前先select(基于mysql的分布式锁) 方案2:加悲观锁 select * from table where id ...
- api 接口开发理论 在php中调用接口以及编写接口
如: http://localhost/openUser.php?act=get_user_list&type=json 在这里openUser.php相当于一个接口,其中get_user_l ...
最新文章
- C语言--static全局使用示例
- python3安装scrapy问题解决
- 天梯赛 L1-027 出租 (20 分)
- [云炬创业基础笔记]第六章商业模式测试1
- JMeter获取JSON内容
- 2009年3月28日四级网络工程师 试卷答案、点评及讨论
- Angular应用带参数的路由实现
- html元素data属性设置变量,HTML5 自定义属性 data-* 和 jQuery.data 详解
- hexo博客添加暗色模式_我如何向网站添加暗模式
- Spring Data JPA 从入门到精通~关键字列表
- react更改路由入参_react路由传参方式
- python识别图片上的文字_python如何一行代码实现图片文字识别
- [导入]给老家新楼的对联
- 一个很好用的JavaScript的文件上传插件plupload
- 如何解决样本不均衡问题
- socket多人聊天程序C语言版(二)
- 闽教英语app 破解版 免费版
- linux 命令:zip 详解
- Android APP安全测试
- [转]漫谈个人知识管理-PKM的方法