在實際工作中,使用php寫api介面是經常做的,php寫好介面後,前台就可以通過鏈結獲取介面提供的資料,而返回的資料一般分為兩種情況,xml和json,在這個過程中,伺服器並不知道,請求的**是什麼,有可能是別人非法呼叫我們的介面,獲取資料,因此就要使用安全驗證。
驗證原理
示意圖
原理
從圖中可以看得很清楚,前台想要呼叫介面,需要使用幾個引數生成簽名。
時間戳:當前時間
隨機數:隨機生成的隨機數
口令:前後臺開發時,乙個雙方都知道的標識,相當於暗號
演算法規則:商定好的運算規則,上面三個引數可以利用演算法規則生成乙個簽名。
前台生成乙個簽名,當需要訪問介面的時候,把時間戳,隨機數,簽名通過url傳遞到後台。後台拿到時間戳,隨機數後,通過一樣的演算法規則計算出簽名,然後和傳遞過來的簽名進行對比,一樣的話,返回資料。
演算法規則
在前後臺互動中,演算法規則是非常重要的,前後臺都要通過演算法規則計算出簽名,至於規則怎麼制定,看你怎麼高興怎麼來。
我這個演算法規則是
時間戳,隨機數,口令按照首字母大小寫順序排序
然後拼接成字串
進行sha1加密
再進行md5加密
轉換成大寫。
前台
這裡我並沒有實際的前台,直接使用乙個php檔案代替前台,然後通過curl模擬get請求。我使用的是tp框架,url格式是pathinfo格式。
源**
}//curl模擬get請求。
//隨機生成字串
private function createnoncestr($length = 8)
return "z".$str;
}/**
* @param $timestamp 時間戳
* @param $randomstr 隨機字串
* @return string 返回簽名
*/private function arithmetic($timestamp,$randomstr)
}伺服器端接受前台資料進行驗證
源**
<?php
/** * created by phpstorm.
* user: administrator
* date: 2017/3/16 0016
* time: 16:01
*/namespace server\controller;
use think\controller;
class servercontroller extends controller
//模擬資料
$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)
}
結果string(57) ""
總結
PHP開發api介面安全驗證
目錄 在實際工作中,使用php寫api介面是經常做的,php寫好介面後,前台就可以通過鏈結獲取介面提供的資料,而返回的資料一般分為兩種情況,xml和json,在這個過程中,伺服器並不知道,請求的 是什麼,有可能是別人非法呼叫我們的介面,獲取資料,因此就要使用安全驗證。從圖中可以看得很清楚,前台想要呼...
PHP開發api介面安全驗證
隨機數 隨機生成的隨機數 口令 前後臺開發時,乙個雙方都知道的標識,相當於暗號 演算法規則 商定好的運算規則,上面三個引數可以利用演算法規則生成乙個簽名。然後拼接成字串 進行sha1加密 再進行md5加密 轉換成大寫。curl模擬get請求。隨機生成字串 private function creat...
PHP開發api介面安全驗證
在實際工作中,使用php寫api介面是經常做的,php寫好介面後,前台就可以通過鏈結獲取介面提供的資料,而返回的資料一般分為兩種情況,xml和json,在這個過程中,伺服器並不知道,請求的 是什麼,有可能是別人非法呼叫我們的介面,獲取資料,因此就要使用安全驗證。從圖中可以看得很清楚,前台想要呼叫介面...