提供Discuz ,ECShop ,PHPCMS ,帝国CMS ,CSS教程 ,PHP教程 ,DedeCMS ,WordPress ,HTML教程等cms问题查询.
当前位置: PHP问题 > php接口怎样保证安全性【php问题】,php

接口的安全性重要缭绕Token、Timestamp和Sign三个机制睁开设想,保证接口的数据不会被改动和反复挪用,下面细致来看:

(1)Token受权机制:(Token是客户端接见效劳端的凭据)--用户运用用户名暗码登录后效劳器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的情势存放在缓存效劳器中。效劳端接收到要求后举行Token考证,假如Token不存在,申明要求无效。(引荐进修:PHP编程从入门到通晓)

(2)时候戳超时机制:(署名机制保证了数据不会被改动)用户每次要求都带上当前时候的时候戳timestamp,效劳端接收到timestamp后跟当前时候举行比对,假如时候差大于肯定时候(比方5分钟),则以为该要求失效。时候戳超时机制是防备DOS进击的有用手腕。

(3)署名机制:将 Token 和 时候戳 加上其他要求参数再用MD5或SHA-1算法(可根据状况加点盐)加密,加密后的数据就是本次要求的署名sign,效劳端接收到要求后以一样的算法获得署名,并跟当前的署名举行比对,假如不一样,申明参数被更悛改,直接返回毛病标识。

/**
 * @desc 接收参数处置惩罚
 */
private function dealParam(){
    //接收header参数--体系参数
    $systemParam=getAllHeadersParam();
    //接收body数据--营业参数(json花样)
    $data=file_get_contents('php://input');
    
    //读取配置文件中的私钥信息
    $api_apiKey=C('api_apiKey');
    $privatekey=$api_apiKey[$systemParam['token']];


    $arr['token']    =$systemParam['token'];        //效劳端分派的标识(差别客户端需运用差别的标识)
    $arr['timestamp']=$systemParam['timestamp'];    //时候戳,UTC时候,以北京时候东八区(+8)为准
    $arr['version']  =$systemParam['version'];      //版本号
    $arr['sign']     =$systemParam['sign'];         //署名
    $arr['source']   =$systemParam['source'];       //泉源(0-安卓/1-IOS/2-H5/3-PC/4-php/5-java)
    $arr['data'] =json_decode($data,true); //营业参数json花样 
    $arr['method'] =$data['method']; //接见接口,花样:模子名.方法名 

    return $arr;
 }
/*
 * @desc 猎取一切以HTTP开首的header参数
 * @return array
 */
private function getAllHeadersParam(){
   $headers = array();
   foreach($_SERVER as $key=>$value){
       if(substr($key, 0, 5)==='HTTP_'){
           $key = substr($key, 5);
           $key = str_replace('_', ' ', $key);
           $key = str_replace(' ', '-', $key);
           $key = strtolower($key);
           $headers[$key] = $value;
       }
   }
   return $headers;
}
/*
 * @desc 署名校验
 * @param $token string 效劳端分派的标识(差别客户端需运用差别的标识)
 * @param $timestamp string 时候戳,UTC时候,以北京时候东八区(+8)为准
 * @param $version string 版本号
 * @param $sign string 署名
 * @param $source int 泉源(0-安卓/1-IOS/2-H5/3-PC/4-php/5-java)
 * @param $privatekey string 私钥
 * @param $data 营业参数json花样
 * @return bool
 */
private function checkAuth($token,$timestamp,$version,$sign,$source,$privatekey,$data){
        //参数推断
        if(empty($token)){
            E('token不能为空!');
        }
        if(empty($timestamp)){
            E('时候戳不能为空!');
        }
        if(empty($version)){
            E('版本号不能为空!');
        }
        if(empty($data)){
            E('营业参数不能为空!');
        }
        if(empty($source) && $source<>'0'){
            E('泉源不能为空!');
        }
        if(empty($sign)){
            E('署名不能为空!');
        }
        if(empty($privatekey)){
            E('私钥不能为空!');
        }
        //时候校验
        $expire_second=C('expire_second',null,10);
        $timestamp_t=$timestamp+$expire_second;
        if($timestamp_t<time()){
            E('要求已逾期!');
        }
        $public= D('public');
        $datas=$this->original;
        //体系参数
        $paramArr=array(
            'token'=>$token,
            'timestamp'=>$timestamp,
            'version'=>$version,
            'source'=>$source,
            'data'=>$data,
        );

        //按划定规矩拼接为字符串
        $str = $this->createSign($paramArr,$this->privatekey);
        
        if($str != $this->sign){
            E('验签毛病!');
        }
        return true;
    }

以上就是php接口怎样保证安全性的细致内容,更多请关注ki4网别的相干文章!

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

0 条评论关于"php接口怎样保证安全性【php问题】,php"

最新评论

    暂无留言哦~~

博客简介

看古风美女插画Cos小姐姐,素材合集图集打包下载:炫龙网,好看二次元插画应有尽有,唯美小姐姐等你来。

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

服务热线:
 

 QQ在线交流

 旺旺在线