Rumah  >  Artikel  >  rangka kerja php  >  Mari kita bincangkan tentang isu pengesahan keselamatan TP dalam proses pembangunan antara muka apl

Mari kita bincangkan tentang isu pengesahan keselamatan TP dalam proses pembangunan antara muka apl

藏色散人
藏色散人ke hadapan
2021-12-28 16:00:172910semak imbas

Lajur tutorial rangka kerja thinkphp berikut akan memperkenalkan anda kepada isu pengesahan keselamatan komunikasi Thinkphp dalam proses pembangunan antara muka apl saya harap ia akan membantu rakan yang memerlukan.

Untuk antara muka yang telah kami tulis, jika ia boleh diakses terus tanpa pensijilan keselamatan, ia akan menyebabkan risiko keselamatan yang sangat besar kepada tapak web kami Sesetengah penggodam boleh secara langsung menggunakan antara muka anda untuk mengendalikan pangkalan data, dan akibatnya akan menjadi tidak dapat dipulihkan.

Jadi bagaimana kita boleh menjalankan pengesahan keselamatan yang berkesan?

Mekanisme access_token dalam pembangunan WeChat digunakan di sini, membenarkan jurutera pembangunan bahagian hadapan aplikasi mendapatkan token dengan menyerahkan appid dan appsecert Pelayan menyimpan token selama 7200 saat terus meminta token setiap kali Token akan ditetapkan semula setiap kali; token sebagai parameter untuk mengakses api kami, dan pelayan akan menentukan Kesahihan token dan pulangan yang sepadan akan diberikan Jika token yang dicache oleh klien tidak sah, ia boleh meminta token secara langsung ini. Kod rujukan lengkap disediakan di bawah Jika ada kaedah yang lebih baik, anda juga boleh meninggalkan mesej

Saya tidak perlu menulis kaedah pengesahan khusus, jadi kami hanya perlu memberi appid dan appsecret kepada pembangun bahagian hadapan apl dan beritahu dia cara menggunakannya Token adalah satu-satunya token Hanya apabila token itu sah boleh anda serahkan Oleh itu, keselamatan boleh dijamin pada tahap tertentu.
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public $appid = &#39;dmm888&#39;;    
    public $appsecret = &#39;http://cnblogs.com/dmm888&#39;;
    
    public function index(){
        $this->show(&#39;<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" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>&#39;,&#39;utf-8&#39;);
    }
    public function  test(){
        if(!isset($_GET[&#39;token&#39;])){
            $this->apiReturn(4001,&#39;invalid token&#39;);
        }else if(!S($_GET[&#39;token&#39;])){            
            $this->apiReturn(4001,&#39;invalid token&#39;);
            
        }
 
        $data = array(
            &#39;id&#39;=>2,
            &#39;username&#39;=>&#39;明之暗夜&#39;,
            &#39;info&#39;=>array(&#39;age&#39;=>24,&#39;address&#39;=>&#39;学府路&#39;,&#39;url&#39;=>&#39;http://cnblogs.com/dmm888&#39;)
        );
        if($data){
            $this->apiReturn(200,&#39;读取用户信息成功&#39;,$data,xml);
        }
    }
    public function getToken(){
        $ori_str = S($this->appid.&#39;_&#39;.$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;
        //这里做了缓存 &#39;a&#39;=>b 和&#39;b&#39;=>a格式的缓存
        S($this->appid.&#39;_&#39;.$this->appsecret,$tmpStr,7200);  
        S($tmpStr,$this->appid.&#39;_&#39;.$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;
    }     
}

Pembelajaran yang disyorkan: "
10 tutorial video thinkphp terkini

"

Atas ialah kandungan terperinci Mari kita bincangkan tentang isu pengesahan keselamatan TP dalam proses pembangunan antara muka apl. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.im. Jika ada pelanggaran, sila hubungi admin@php.cn Padam