Code前端首页关于Code前端联系我们

Thinkphp在应用接口开发过程中的通信安全证书

terry 2年前 (2023-09-25) 阅读数 50 #后端开发

如果编写的接口没有安全证书就可以直接访问,那么对我们网站来说代表着非常高的安全风险。有些黑客可以直接使用你的界面,操作数据库的后果是不可估量的。那么我们如何才能进行有效的安全审计呢?这里我使用了微信开发中的access_token机制,让前端开发工程师app通过发送appid和appsecert来获取token。服务器缓存token7200秒。如果客户端每次都直接请求token,token每次都会恢复。因此,我们建议客户端也缓存它。客户端可以判断本地token是否存在。如果存在,则可以直接使用token作为参数来访问API。服务器判断token的有效性并返回相应信息。客户端缓存如果token失败,只需再次请求token即可。差不多就是这个想法。我在下面提供了完整的推荐代码。如果有更好的方法,请指教。

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public$appid = 'dmm888';    
    public$appsecret = '';
    
    publicfunction index(){
        $this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>[ 您现在访问的是Home模块的Index控制器 ]</div><script type="text/javascript"  charset="UTF-8"></script>','utf-8');
    }
    publicfunction  test(){
        if(!isset($_GET['token'])){
            $this->apiReturn(4001,'invalid token');
        }elseif(!S($_GET['token'])){            
            $this->apiReturn(4001,'invalid token');
            
        }

 
        $data = array(
            'id'=>2,
            'username'=>'明之暗夜',
            'info'=>array('age'=>24,'address'=>'学府路','url'=>'')
        );
        if($data){
            $this->apiReturn(200,'读取用户信息成功',$data,xml);
        }


    }

    publicfunction getToken(){
        $ori_str = S($this->appid.'_'.$this->appsecret);   //这里appid和appsecret我写固定了,实际是通过客户端获取  所以这里我们可以做很多 比如判断appid和appsecret有效性等if($ori_str){       //重新获取就把以前的token删除
            S($ori_str,null);
        }

        //这里是token产生的机制  您也可以自己定义$nonce = $this->createNoncestr(32);
        $tmpArr = array($nonce,$this->appid,$this->appsecret);

        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        // echo $tmpStr;
        //这里做了缓存 'a'=>b 和'b'=>a格式的缓存
        S($this->appid.'_'.$this->appsecret,$tmpStr,7200);  
        S($tmpStr,$this->appid.'_'.$this->appsecret,7200);

    }

     /**
     *  作用:产生随机字符串,不长于32位
     */function createNoncestr( $length = 32 ) 
    {
        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";  
        $str ="";
        for ( $i = 0; $i < $length; $i++ )  {  
            $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);  
        }  
        return$str;
    }     
}

具体验证方法不用我写了。这样,我们只需要将appid和appsecret提供给应用的前端开发人员,并告诉他们如何使用即可。token是唯一的信物。只有token有效,可以向下执行,以确保安全。您可以获得一些保修

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门