激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語言 - PHP教程 - PHP開發(fā)api接口安全驗(yàn)證的實(shí)例講解

PHP開發(fā)api接口安全驗(yàn)證的實(shí)例講解

2019-10-16 11:19善良死神 PHP教程

下面小編就為大家分享一篇PHP開發(fā)api接口安全驗(yàn)證的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

php的api接口

在實(shí)際工作中,使用PHP寫api接口是經(jīng)常做的,PHP寫好接口后,前臺(tái)就可以通過鏈接獲取接口提供的數(shù)據(jù),而返回的數(shù)據(jù)一般分為兩種情況,xml和json,在這個(gè)過程中,服務(wù)器并不知道,請(qǐng)求的來源是什么,有可能是別人非法調(diào)用我們的接口,獲取數(shù)據(jù),因此就要使用安全驗(yàn)證。

驗(yàn)證原理

示意圖

PHP開發(fā)api接口安全驗(yàn)證的實(shí)例講解

原理

從圖中可以看得很清楚,前臺(tái)想要調(diào)用接口,需要使用幾個(gè)參數(shù)生成簽名。

時(shí)間戳:當(dāng)前時(shí)間

隨機(jī)數(shù):隨機(jī)生成的隨機(jī)數(shù)

口令:前后臺(tái)開發(fā)時(shí),一個(gè)雙方都知道的標(biāo)識(shí),相當(dāng)于暗號(hào)

算法規(guī)則:商定好的運(yùn)算規(guī)則,上面三個(gè)參數(shù)可以利用算法規(guī)則生成一個(gè)簽名。

前臺(tái)生成一個(gè)簽名,當(dāng)需要訪問接口的時(shí)候,把時(shí)間戳,隨機(jī)數(shù),簽名通過URL傳遞到后臺(tái)。后臺(tái)拿到時(shí)間戳,隨機(jī)數(shù)后,通過一樣的算法規(guī)則計(jì)算出簽名,然后和傳遞過來的簽名進(jìn)行對(duì)比,一樣的話,返回?cái)?shù)據(jù)。

算法規(guī)則

在前后臺(tái)交互中,算法規(guī)則是非常重要的,前后臺(tái)都要通過算法規(guī)則計(jì)算出簽名,至于規(guī)則怎么制定,看你怎么高興怎么來。

我這個(gè)算法規(guī)則是

1 時(shí)間戳,隨機(jī)數(shù),口令按照首字母大小寫順序排序

2 然后拼接成字符串

3 進(jìn)行sha1加密

4 再進(jìn)行MD5加密

5 轉(zhuǎn)換成大寫。

前臺(tái)

這里我并沒有實(shí)際的前臺(tái),直接使用一個(gè)PHP文件代替前臺(tái),然后通過CURL模擬GET請(qǐng)求。我使用的是TP框架,URL格式是pathinfo格式。

源代碼

01<?php
02/**
03 * Created by PhpStorm.
04 * User: Administrator
05 * Date: 2017/3/16 0016
06 * Time: 15:56
07 */
08namespace Client\Controller;
09use Think\Controller;
10class ClientController extends Controller{
11 const TOKEN = 'API';
12 //模擬前臺(tái)請(qǐng)求服務(wù)器api接口
13 public function getDataFromServer(){
14  //時(shí)間戳
15  $timeStamp = time();
16  //隨機(jī)數(shù)
17  $randomStr = $this -> createNonceStr();
18  //生成簽名
19  $signature = $this -> arithmetic($timeStamp,$randomStr);
20  //url地址
21  $url = "http://www.apitest.com/Server/Server/respond/t/{$timeStamp}/r/{$randomStr}/s/{$signature}";
22  $result = $this -> httpGet($url);
23  dump($result);
24 }
25 //curl模擬get請(qǐng)求。
26 private function httpGet($url){
27  $curl = curl_init();
28  //需要請(qǐng)求的是哪個(gè)地址
29  curl_setopt($curl,CURLOPT_URL,$url);
30  //表示把請(qǐng)求的數(shù)據(jù)已文件流的方式輸出到變量中
31  curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
32  $result = curl_exec($curl);
33  curl_close($curl);
34  return $result;
35 }
36 //隨機(jī)生成字符串
37 private function createNonceStr($length = 8) {
38  $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
39  $str = "";
40  for ($i = 0; $i < $length; $i++) {
41   $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
42  }
43  return "z".$str;
44 }
45 /**
46  * @param $timeStamp 時(shí)間戳
47  * @param $randomStr 隨機(jī)字符串
48  * @return string 返回簽名
49  */
50 private function arithmetic($timeStamp,$randomStr){
51  $arr['timeStamp'] = $timeStamp;
52  $arr['randomStr'] = $randomStr;
53  $arr['token'] = self::TOKEN;
54  //按照首字母大小寫順序排序
55  sort($arr,SORT_STRING);
56  //拼接成字符串
57  $str = implode($arr);
58  //進(jìn)行加密
59  $signature = sha1($str);
60  $signature = md5($signature);
61  //轉(zhuǎn)換成大寫
62  $signature = strtoupper($signature);
63  return $signature;
64 }
65}

服務(wù)器端

接受前臺(tái)數(shù)據(jù)進(jìn)行驗(yàn)證

源代碼

01<?php
02/**
03 * Created by PhpStorm.
04 * User: Administrator
05 * Date: 2017/3/16 0016
06 * Time: 16:01
07 */
08namespace Server\Controller;
09use Think\Controller;
10class ServerController extends Controller{
11 const TOKEN = 'API';
12 //響應(yīng)前臺(tái)的請(qǐng)求
13 public function respond(){
14  //驗(yàn)證身份
15  $timeStamp = $_GET['t'];
16  $randomStr = $_GET['r'];
17  $signature = $_GET['s'];
18  $str = $this -> arithmetic($timeStamp,$randomStr);
19  if($str != $signature){
20   echo "-1";
21   exit;
22  }
23  //模擬數(shù)據(jù)
24  $arr['name'] = 'api';
25  $arr['age'] = 15;
26  $arr['address'] = 'zz';
27  $arr['ip'] = "192.168.0.1";
28  echo json_encode($arr);
29 }
30 /**
31  * @param $timeStamp 時(shí)間戳
32  * @param $randomStr 隨機(jī)字符串
33  * @return string 返回簽名
34  */
35 public function arithmetic($timeStamp,$randomStr){
36  $arr['timeStamp'] = $timeStamp;
37  $arr['randomStr'] = $randomStr;
38  $arr['token'] = self::TOKEN;
39  //按照首字母大小寫順序排序
40  sort($arr,SORT_STRING);
41  //拼接成字符串
42  $str = implode($arr);
43  //進(jìn)行加密
44  $signature = sha1($str);
45  $signature = md5($signature);
46  //轉(zhuǎn)換成大寫
47  $signature = strtoupper($signature);
48  return $signature;
49 }
50}

結(jié)果

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

總結(jié)

這種方法只是其中的一種方法,其實(shí)還有很多方法都是可以進(jìn)行安全驗(yàn)證的。

以上這篇PHP開發(fā)api接口安全驗(yàn)證的實(shí)例講解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
279
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 成人激情在线观看 | 91成| 91精品国产九九九久久久亚洲 | 国产精品片一区二区三区 | 精品久久久久久久久中文字幕 | 涩涩99 | 成人免费毛片片v | 久久精品av| 亚洲片在线观看 | 精品国产乱码一区二区三区四区 | 斗罗破苍穹在线观看免费完整观看 | 97风流梦电影| 97精品视频在线观看 | 久久久资源网 | 欧美性成人 | 久久蜜臀一区二区三区av | 成人午夜免费观看 | 黄网站色成年大片免费高 | 在线成人免费视频 | 亚洲一区在线免费视频 | 精品国产一区二区三区天美传媒 | 看a级毛片| 成人激情在线 | 欧美日本91精品久久久久 | 午夜视频在线 | 污污短视频 | 亚洲精品久久久久久久久久久 | 91社区电影 | 免费国产在线精品 | 护士xxxx| 爱高潮www亚洲精品 欧美黄色一级片视频 | 国内精品久久久久久久久久 | 吾色视频| 中文字幕四区 | 毛片一级免费看 | 久久久久久久久久网 | www亚洲| 91精品国产91久久久久久不卞 | 久久精品久久精品国产大片 | 国产va在线观看 | 末成年女av片一区二区 |