日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php接口开发 安全_PHP开发api接口安全验证的实例讲解

發布時間:2023/12/1 php 160 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php接口开发 安全_PHP开发api接口安全验证的实例讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

php的api接口

在實際工作中,使用PHP寫api接口是經常做的,PHP寫好接口后,前臺就可以通過鏈接獲取接口提供的數據,而返回的數據一般分為兩種情況,xml和json,在這個過程中,服務器并不知道,請求的來源是什么,有可能是別人非法調用我們的接口,獲取數據,因此就要使用安全驗證。

驗證原理

示意圖

原理

從圖中可以看得很清楚,前臺想要調用接口,需要使用幾個參數生成簽名。

時間戳:當前時間

隨機數:隨機生成的隨機數

口令:前后臺開發時,一個雙方都知道的標識,相當于暗號

算法規則:商定好的運算規則,上面三個參數可以利用算法規則生成一個簽名。

前臺生成一個簽名,當需要訪問接口的時候,把時間戳,隨機數,簽名通過URL傳遞到后臺。后臺拿到時間戳,隨機數后,通過一樣的算法規則計算出簽名,然后和傳遞過來的簽名進行對比,一樣的話,返回數據。

算法規則

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

我這個算法規則是

1 時間戳,隨機數,口令按照首字母大小寫順序排序

2 然后拼接成字符串

3 進行sha1加密

4 再進行MD5加密

5 轉換成大寫。

前臺

這里我并沒有實際的前臺,直接使用一個PHP文件代替前臺,然后通過CURL模擬GET請求。我使用的是TP框架,URL格式是pathinfo格式。

源代碼

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2017/3/16 0016

* Time: 15:56

*/

namespace Client\Controller;

use Think\Controller;

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;

}

}

服務器端

接受前臺數據進行驗證

源代碼

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2017/3/16 0016

* Time: 16:01

*/

namespace Server\Controller;

use Think\Controller;

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($arr);

}

/**

* @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($arr);

//進行加密

$signature = sha1($str);

$signature = md5($signature);

//轉換成大寫

$signature = strtoupper($signature);

return $signature;

}

}

結果

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

總結

這種方法只是其中的一種方法,其實還有很多方法都是可以進行安全驗證的。

以上這篇PHP開發api接口安全驗證的實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的php接口开发 安全_PHP开发api接口安全验证的实例讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。