新浦京81707con > 功能介绍 > PHP开发api接口安全验证

原标题:PHP开发api接口安全验证

浏览次数:186 时间:2020-01-30

结果string "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"

php的api接口

<?php/** * Created by PhpStorm. * User: Administrator * Date: 2017/3/16 0016 * Time: 16:01 */namespace ServerController;use ThinkController;class ServerController extends Controller{ const TOKEN = 'API'; //响应前台的请求 public function respond(){ //验证身份 $timeStamp = $_GET['t']; $randomStr = $_GET['r']; $signature = $_GET['s']; $str = $this -> arithmetic($timeStamp,$randomStr); if($str != $signature){ echo "-1"; exit; } //模拟数据 $arr['name'] = 'api'; $arr['age'] = 15; $arr['address'] = 'zz'; $arr['ip'] = "192.168.0.1"; echo json_encode; } /** * @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; //进行加密 $signature = sha1; $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; }}

劳动器端

收受前台数据进行验证

图片 1这里写图片描述原理从图中得以看得很清楚,前台想要调用接口,须求接收多少个参数生成签字。时间戳:当前时间随意数:随机变化的随便数口令:前后台开采时,三个两头都了然的标记,也便是暗号算准则则:商定好的演算法则,上边三个参数能够选拔算准绳则改换四个签定。

注解原理

总结这种方法只是里面的大器晚成种艺术,其实还会有大多办法都以能够实行安全注脚的。

总结

劳务器端收受前台数据开展表达源代码

结果

在其实工作中,使用PHP写api接口是时常做的,PHP写好接口后,前台就能够经过链接获取接口提供的数据,而回到的数量貌似分为三种景况,xml和json,在此个进度中,服务器并不知道,央求的发源是何许,有希望是外人违法调用大家的接口,获取数据,因而将在采纳安全认证。注脚原理暗暗表示图

原理

从图中得以看得很清楚,前台想要调用接口,要求采纳多少个参数生成签字。

  • 日子戳:当今天子
  • 轻松数:随机变化的自由数
  • 口令:前后台开辟时,三个双边都明白的标记,约等于暗记
  • 算准则则:商定好的运算规则,上面多少个参数能够应用算法规则改换八个签约。

前台湾学子成二个签订左券,当须要拜望接口的时候,把时光戳,随机数,具名通过UENCOREL传递到后台。后台拿届时刻戳,随机数后,通过大器晚成致的算准绳则计算出具名,然后和传递过来的签约实行相比,类似的话,重回数据。

前台这里本身并未实际的前台,直接利用八个PHP文件代替前台,然后通过CU福特ExplorerL模拟GET乞求。笔者使用的是TP框架,UHavalL格式是pathinfo格式。源代码

总结

这种措施只是里面包车型地铁生龙活虎种艺术,其实还恐怕有比很多措施都以足以拓展安全证明的。

<?php/** * Created by PhpStorm. * User: Administrator * Date: 2017/3/16 0016 * Time: 15:56 */namespace ClientController;use ThinkController;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.apitest.com/Server/Server/respond/t/{$timeStamp}/r/{$randomStr}/s/{$signature}"; $result = $this -> httpGet; dump; } //curl模拟get请求。 private function httpGet{ $curl = curl_init(); //需要请求的是哪个地址 curl_setopt($curl,CURLOPT_URL,$url); //表示把请求的数据已文件流的方式输出到变量中 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $result = curl_exec; curl_close; return $result; } //随机生成字符串 private function createNonceStr($length = 8) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i  ) { $str .= substr($chars, mt_rand(0, strlen - 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; //进行加密 $signature = sha1; $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; }}

源代码

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/3/16 0016
 * Time: 15:56
 */
namespace ClientController;
use ThinkController;

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.apitest.com/Server/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;
    }
}

前台生成多个具名,当须要拜谒接口的时候,把日子戳,随机数,具名通过UQX56L传递到后台。后台拿届时间戳,随机数后,通过相近的算准则则总计出具名,然后和传递过来的签名进行比较,同样的话,再次来到数据。算法规则在前后台人机联作中,算法法规是万分重要的,前后台都要透过算准绳则总计出签字,至于法规怎么制订,看您怎么欢畅怎么来。作者那个算准则则是时刻戳,随机数,口令根据首字母大小写顺序排序然后拼接成字符串进行sha1加密再拓宽MD5加密调换来大写。

表明原理

结果

string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"
  1. 示意图
  2. 原理
  3. 算法规则

本文由新浦京81707con发布于功能介绍,转载请注明出处:PHP开发api接口安全验证

关键词: 新浦京81707con PHP 接口 api

上一篇:语法笔记,PHP可变变量名

下一篇:没有了