Dieses Mal werde ich Ihnen die Implementierung der API-Schnittstellen-Sicherheitsüberprüfungsfunktion vorstellen. Was sind die Vorsichtsmaßnahmen für die Implementierung der API-Schnittstellen-Sicherheitsüberprüfungsfunktion? Das Folgende ist ein praktischer Fall.
PHP-API-Schnittstelle
In der tatsächlichen Arbeit ist es üblich, PHP zum Schreiben von API-Schnittstellen zu verwenden Rezeption Sie können die von der Schnittstelle bereitgestellten Daten über den Link abrufen. Die zurückgegebenen Daten werden im Allgemeinen in XML und JSON unterteilt. Bei diesem Vorgang kennt der Server möglicherweise nicht die Quelle der Anforderung else ruft illegal unsere Schnittstelle auf, um Daten abzurufen, daher muss eine Sicherheitsüberprüfung durchgeführt werden.
Verifizierungsprinzip
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 beiden Parteien bekannt, entspricht dem Geheimcode
Algorithmusregeln: Die vereinbarten Betriebsregeln, die oben genannten drei Parameter können die Algorithmusregeln verwenden, um eine Signatur zu generieren.
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 sowohl im Front-End als auch im Back-End sehr wichtig Sie müssen Signaturen anhand von Algorithmusregeln berechnen. Wie Sie die Regeln festlegen, hängt davon ab, wie Sie es möchten.
Die Regeln meines Algorithmus sind
1. Der Zeitstempel, die Zufallszahl und das Passwort werden in Groß-/Kleinschreibung sortiert
2 und dann in eine Zeichenfolge gespleißt
3 Sha1-Verschlüsselung durchführen
4 Anschließend MD5-Verschlüsselung durchführen
5 In Großbuchstaben umwandeln.
Frontend
Ich habe hier kein eigentliches Frontend, ich verwende direkt eine PHP-Datei anstelle des Frontends und simuliere dann ein GET-Anfrage über 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
Quellcode
<?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; } }
Ergebnisse
string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"
Zusammenfassung
Diese Methode ist nur eine davon. Tatsächlich gibt es viele Methoden, die zur Sicherheitsüberprüfung verwendet werden können.
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website.
Empfohlene Lektüre:
Detaillierte Erläuterung der Verwendung von PHP-Rückruffunktionen und anonymen Funktionen
Zugriff auf Verzeichnisdienstberechtigungen von phpstudy2018
Das obige ist der detaillierte Inhalt vonImplementierung der Sicherheitsüberprüfungsfunktion der API-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!