Heim > Artikel > Backend-Entwicklung > Sicherheitsüberprüfung der PHP-Entwicklungs-API-Schnittstelle
PHP-API-Schnittstelle
In der tatsächlichen Arbeit wird häufig PHP zum Schreiben der API-Schnittstelle verwendet. Nachdem PHP die Schnittstelle geschrieben hat, kann die Rezeption die von der Schnittstelle bereitgestellten Daten abrufen Über den Link werden die zurückgegebenen Daten im Allgemeinen in XML und JSON unterteilt. In diesem Prozess kennt der Server möglicherweise nicht die Quelle der Anforderung Es ist notwendig, eine Sicherheitsüberprüfung durchzuführen.
Überprüfungsprinzip
Schematische Darstellung
Prinzip
Auf dem Bild ist deutlich zu erkennen, dass die Rezeption, wenn sie die Schnittstelle aufrufen möchte, mehrere Parameter verwenden muss, um eine Signatur zu generieren.
● Zeitstempel: aktuelle Zeit
● Zufallszahl: zufällig generierte Zufallszahl
● Passwort: während der Front-End- und Backend-Entwicklung eine Kennung, die beiden Parteien bekannt ist , entspricht Passwort
● Algorithmusregeln: Vereinbarte Betriebsregeln, die oben genannten drei Parameter können die Algorithmusregeln zum Generieren einer Signatur verwenden.
Das Frontend generiert eine Signatur. Wenn ein Zugriff auf die Schnittstelle erforderlich ist, werden der Zeitstempel, die Zufallszahl und die Signatur über die URL an das Backend übergeben. Nachdem der Zeitstempel und die Zufallszahl im Hintergrund abgerufen wurden, berechnet er die Signatur anhand derselben Algorithmusregeln und vergleicht sie dann mit der übergebenen Signatur. Wenn sie identisch sind, werden die Daten zurückgegeben.
Algorithmusregeln
Bei Front-End- und Back-End-Interaktionen sind Algorithmusregeln sehr wichtig. Das Front-End und das Back-End müssen Signaturen anhand von Algorithmusregeln berechnen Zur Formulierung der Regeln siehe „Komm, wie du willst“.
Meine Algorithmusregeln sind
● Zeitstempel, Zufallszahlen und Passwörter werden in Groß-/Kleinschreibung sortiert
● und dann in Zeichenfolgen gespleißt
● Ausführen sha1-Verschlüsselung
● Anschließend MD5-Verschlüsselung durchführen
● In Großbuchstaben umwandeln.
Rezeption
Ich habe hier keine echte Rezeption, ich verwende direkt eine PHP-Datei anstelle der Rezeption und simuliere dann eine GET-Anfrage durch CURL. Ich verwende das TP-Framework und das URL-Format ist das Pathinfo-Format.
Quellcode
<?php /** * 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; } }
Serverseitig
Frontend-Daten zur Überprüfung akzeptieren
Quelle Code
<?php /** * 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; } }
Ergebnis
string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"
Zusammenfassung
Diese Methode ist tatsächlich nur eine der Methoden Da Es gibt viele Möglichkeiten, eine Sicherheitsüberprüfung durchzuführen.
Weitere PHP-Kenntnisse finden Sie im PHP-Tutorial!
Das obige ist der detaillierte Inhalt vonSicherheitsüberprüfung der PHP-Entwicklungs-API-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!