php api安全,PHP接口安全_1

  php api安全,PHP接口安全

  php的api接口

  在实际工作中,经常用PHP编写api接口。PHP编写接口后,前台可以通过链接获取接口提供的数据,返回的数据一般分为两种情况,xml和json。在这个过程中,服务器不知道请求的来源是什么。有可能是别人非法调用我们的接口来获取数据,所以需要使用安全验证。

  证实原则

  示意图

  原则

  从图中可以清楚地看到,前台如果要调用接口,需要使用几个参数来生成签名。

  时间戳:当前时间随机数:随机生成的随机数密码:前台和后台开发时双方都知道的标识,相当于约定的操作规则。上述三个参数可以通过使用算法规则来生成签名。

  前台生成一个签名,当需要访问接口时,时间戳、随机数、签名通过URL传输到后台。得到后台时间戳和随机数后,用同样的算法规则计算签名,然后和传递过来的签名进行比较。如果相同,则返回数据。

  算法规则

  在前后交互中,算法规则很重要。前面和后面都要通过算法规则计算签名。至于规则怎么制定,就看你有多开心了。

  我算法的规则是

  时间戳、随机数、密码按照首字母的大小写顺序排序,然后拼接成一个字符串进行sha1加密,再进行MD5加密进行大写。

  舞台

  我在这里没有真正的前台。我直接用一个PHP文件代替前台,然后通过CURL模拟GET请求。我用的是TP框架,URL格式是pathinfo格式。

  源代码

  ?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

  *由PhpStorm创建。

  *用户:管理员

  *日期:2017年3月16日

  *时间:15时56分

  命名空间客户端\控制器;

  使用思考\控制器;

  类ClientController扩展控制器{

  const TOKEN= API

  //模拟前台请求服务器的api接口

  公共函数getDataFromServer(){

  //时间戳

  $ timeStamp=time();

  //随机数

  $ randomStr=$ this-createnoncastr();

  //生成签名

  $signature=$this -算术($timeStamp,$ randomStr);

  //url地址

  $ URL= http://www . API test . com/Server/Server/respond/t/{ $ timeStamp }/r/{ $ randomStr }/s/{ $ signature } ;

  $ result=$ this-http get($ URL);

  转储($ result);

  //curl模拟get请求。

  私有函数httpGet($url){

  $ curl=curl _ init();

  //需要请求哪个地址?

  curl_setopt($curl,CURLOPT_URL,$ URL);

  //表示将请求的数据以文件流的形式输出到变量中。

  curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);

  $ result=curl _ exec($ curl);

  curl _ close($ curl);

  返回$ result

  //随机生成一个字符串

  私有函数createnoncentr($ length=8){

  $ chars= abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 0123456789 ;

  $ str=“”;

  for($ I=0;$ i $长度;$i ) {

  $str。=substr($chars,mt_rand(0,strlen($chars) - 1),1);

  返回“z”。$ str

  * @param $timeStamp时间戳

  * @ paramrandomStr随机字符串

  * @return string返回签名

  私有函数算术($timeStamp,$randomStr){

  $ arr[ timeStamp ]=$ timeStamp;

  $ arr[ randomStr ]=$ randomStr;

  $ arr[ TOKEN ]=self:TOKEN;

  //按首字母的大小写顺序排序

  sort($arr,SORT _ STRING);

  //拼接成字符串

  $str=内爆($ arr);

  //加密

  $ signature=sha1($ str);

  $ signature=MD5($ signature);

  //转换成大写

  $ signature=strtoupper($ signature);

  return $ signature

  计算机网络服务器

  接受前台数据进行验证。

  源代码

  ?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

  *由PhpStorm创建。

  *用户:管理员

  *日期:2017年3月16日

  *时间:16时01分

  命名空间服务器\控制器;

  使用思考\控制器;

  类ServerController扩展控制器{

  const TOKEN= API

  //响应前台的请求

  公共函数respond(){

  //验证您的身份

  $ timeStamp=$ _ GET[ t ];

  $ randomStr=$ _ GET[ r ];

  $ signature=$ _ GET[ s ];

  $str=$this -算术($timeStamp,$ randomStr);

  if($str!=$signature){

  回显-1 ;

  退出;

  //模拟数据

  $ arr[ name ]= API ;

  $ arr[ age ]=15;

  $ arr[ address ]= ZZ ;

  $ arr[ IP ]= 192 . 168 . 0 . 1 ;

  echo JSON _ encode($ arr);

  * @param $timeStamp时间戳

  * @param $randomStr随机字符串

  * @返回字符串返回签名

  公共函数算术($timeStamp,$randomStr){

  $ arr[ timeStamp ]=$ timeStamp;

  $ arr[ randomStr ]=$ randomStr;

  $ arr[ TOKEN ]=self:TOKEN;

  //按照首字母大小写顺序排序

  sort($arr,SORT _ STRING);

  //拼接成字符串

  $str=内爆($ arr);

  //进行加密

  $ signature=sha1($ str);

  $ signature=MD5($ signature);

  //转换成大写

  $ signature=strtoupper($ signature);

  返回$签名

  结果

  string(57) {name:api , age:15, address:zz , ip:192.168.0.1}

  总结

  这种方法只是其中的一种方法,其实还有很多方法都是可以进行安全验证的。

  http://blog..net/li741350149/article/details/62887524

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 七种php开发环境搭建工具有哪些,七种php开发环境搭建工具包括
  • 七种php开发环境搭建工具有哪些,七种php开发环境搭建工具包括,七种PHP开发环境搭建工具
  • php高并发三种解决方法,php 高并发解决方案
  • php高并发三种解决方法,php 高并发解决方案,PHP解决高并发问题(opcache)
  • php邮件发送的两种方式区别,php邮件发送的两种方式是什么
  • php邮件发送的两种方式区别,php邮件发送的两种方式是什么,php邮件发送的两种方式
  • php跳转页面的几种实现方法详解图,php跳转页面的几种实现方法详解视频
  • php跳转页面的几种实现方法详解图,php跳转页面的几种实现方法详解视频,PHP跳转页面的几种实现方法详解
  • PHP购物车,php立即购买和购物车功能
  • PHP购物车,php立即购买和购物车功能,php实现购物车功能(上)
  • php读取pdf数据,php pdf读取
  • php读取pdf数据,php pdf读取,PHP中使用mpdf 导出PDF文件的实现方法
  • php网站判断用户是否是手机访问的方法有哪些,php如何判断用户是否登录
  • 留言与评论(共有 条评论)
       
    验证码: