一个PHP开发api接口安全验证的例子
php的api接口
在实际工作中,经常用PHP编写api接口。PHP写好接口后,前台可以通过链接获取接口提供的数据,返回的数据一般分为xml和json两种情况。在这个过程中,服务器不知道请求的来源是什么,可能是别人非法调用我们的接口来获取数据,所以需要使用安全验证。
证实原则
示意图
原则
从图中可以清楚地看到,前台如果要调用接口,需要使用几个参数来生成签名。
时间戳:当前时间
随机数:随机生成的随机数
密码:在前台和后台开发时,一个双方都知道的标志就相当于一个密码
算法规则:约定的操作规则。以上三个参数可用于生成签名。
前台生成一个签名,当需要访问接口时,通过URL将时间戳、随机数、签名传输到后台。后台获取时间戳和随机数后,用相同的算法规则计算签名,然后与传递的签名进行比较,如果相同,则返回数据。
算法规则
在前后交互中,算法规则非常重要。前面和后面都应该通过算法规则来计算签名。如何制定规则取决于你有多开心。
我的算法规则是
1时间戳、随机数和密码按照初始案例顺序排序
2,然后拼接成字符串
3执行sha1加密
4,然后进行MD5加密
5到大写。
服务台
我这里没有实际的前台,所以我用一个PHP文件代替前台,然后通过CURL模拟GET请求。我用的是TP框架,URL格式是pathinfo格式。
源代码
?php/** *由PhpStorm创建。*用户:管理员*日期: 2017/3/16 0016 *时间: 15:56 */名称空间客户端\控制器;使用思考\控制器;类ClientController扩展了Controller { const TOKEN=' API//模拟前台请求服务器api接口公共函数getDataFromserver(){//timeStamp $ timeStamp=time();//随机数$ Random str=$ this-create non essr();//生成签名$ signature=$ this-算术($ timestamp,$ random str);//url地址$ URL=' http://www.apitest.com/server/server/respond/t/{$时间戳}/r/{ $ random str }/s/{ $ signature } ';$ result=$ this-HttpGet($ URL);dump($ result);} //curl模拟get请求。私有函数HttpGet($ URL){ $ curl=curl _ init();//应该请求curl _ setopt ($ curl,curl opt _ URL,$ URL)的哪个地址;//表示以文件流的形式将请求的数据输出到变量,curl _ setopt ($ curl,curl opt _ return transfer,1);$ result=curl _ exec($ curl);curl _ close($ curl);返回$ result}//随机生成字符串私有函数createnoncrest($ length=8){ $ chars=' abcdefghijklmnopqrstuvwxyzabbcdefghijklmnopqrstuvwxyz 0123456789 ';$ str=for($ I=0;$ i $长度;$i ) { $str。=substr($chars,mt_rand(0,strlen($chars) - 1),1);}返回“z”。$ str}/* * * @ param $timeStamp timeStamp * @ param $ randomStr * @ return string返回signature */private function算术($ timeStamp,$ random str){ $ arr[' timeStamp ']=$ timeStamp;$ arr[' randomStr ']=$ randomStr;$ arr[' token ']=self : token;//根据首字母大小写排序(sort sort($arr,SORT _ STRING);//拼接成字符串$ str=embedded($ arr);//encrypt $ signature=sha1($ str);$签名=MD5($签名);//转换为大写$ signature=strtopper($ signature);返回$签名;}}服务器端
接受前台数据进行验证
源代码
?php/** *由PhpStorm创建。*用户:管理员*日期: 2017/3/16 0016 *时间: 16:01 */名称空间服务器\控制器;使用思考\控制器;类服务器控制器扩展了控制器{ const TOKEN=' API//响应前台的请求公共函数response(){//验证身份$ TiMer=$ _ GET[' t '];$ randomStr=$ _ GET[' r '];$ signature=$ _ GET[' s '];$ str=$这个-算术($ TiMer,$ random str);if($str!=$ signature){ echo '-1 ';退出;} //模拟数据$ arr[' name ']=' API ';$ arr[' age ']=15;$ arr[' address ']=' ZZ ';$ arr[' IP ']=' 192。168 .0 .1 ';echo JSON _ encode($ arr);}/* * * @ param $ TiMer时间戳* @param $randomStr随机字符串* @返回字符串返回签名*/公共函数算术($ TiMer,$ random str){ $ arr[' TiMer ']=$ TiMer;$ arr[' randomStr ']=$ randomStr;$ arr[' token ']=self : token;//按照首字母大小写顺序排序sort($arr,SORT _ STRING);//拼接成字符串$str=内爆($ arr);//进行加密$ signature=sha1($ str);$签名=MD5($签名);//转换成大写$ signature=strtopher($ signature);返回$签名;}}结果
string(57) '{'name':'api ',' age':15,' address':'zz ',' ip':'192.168.0.1'} '总结
这种方法只是其中的一种方法,其实还有很多方法都是可以进行安全验证的。
以上这篇服务器端编程语言(专业超文本预处理器的缩写)开发美国石油学会(美国石油协会)接口安全验证的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
版权声明:一个PHP开发api接口安全验证的例子是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。