Heim > Artikel > Backend-Entwicklung > So entwickeln Sie ein Beispiel für die Sicherheitsüberprüfung einer API-Schnittstelle mit PHP
In der tatsächlichen Arbeit wird häufig PHP zum Schreiben von API-Schnittstellen verwendet. Nachdem PHP die Schnittstelle geschrieben hat, kann die Rezeption die von der Schnittstelle bereitgestellten Daten über den Link abrufen Die zurückgegebenen Daten werden im Allgemeinen in XML und JSON unterteilt. Während dieses Vorgangs kennt der Server die Quelle der Anforderung nicht. Möglicherweise ruft jemand anderes illegal unsere Schnittstelle auf, um Daten abzurufen. Daher muss eine Sicherheitsüberprüfung durchgeführt werden .
Auf dem Bild ist deutlich zu erkennen, dass die Rezeption Wenn Sie die Schnittstelle aufrufen möchten, müssen mehrere Parameter verwendet werden, um eine Signatur zu generieren.
Zeitstempel: aktuelle Zeit
Zufallszahl: zufällig generierte Zufallszahl
Passwort: Während der Front-End- und Back-End-Entwicklung entspricht ein beiden Parteien bekanntes Logo einem Geheimcode
Algorithmusregeln: Vereinbarte Betriebsregeln, die oben genannten drei Parameter können Algorithmusregeln verwenden eine Signatur erstellen.
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.
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 Die Regeln, es kommt darauf an, wie es dir gefällt.
Die Regeln meines Algorithmus sind
Zeitstempel, Zufallszahlen und Passwörter werden in der Reihenfolge der Groß- und Kleinschreibung sortiert
Dann In eine Zeichenfolge verketten
SHA1-Verschlüsselung durchführen
und dann MD5-Verschlüsselung durchführen
konvertieren in Großbuchstaben.
Ich habe hier keine echte Rezeption, ich verwende direkt eine PHP-Datei anstelle der Rezeption und simuliere dann eine GET-Anfrage über CURL. Ich verwende das TP-Framework und das URL-Format ist das Pathinfo-Format.
<?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 <h2 style="padding:0px;font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">Serverseite</h2><p style="font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">Vordergrunddaten zur Überprüfung akzeptieren</p><h3 style="padding:0px;font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">Quellcode</h3><pre style="white-space:pre-wrap;padding:10px;font-size:14px;line-height:22px;background-color:rgba(128,128,128,.05);border:1px solid rgba(128,128,128,.075);" class="brush:php;toolbar:false;"><?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; } }
string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"
Diese Methode ist nur eine davon. Tatsächlich gibt es viele Methoden, die zur Sicherheitsüberprüfung verwendet werden können.
Verwandte Empfehlungen:
PHP-Sharing über API-Schnittstellenbeispiele
PHP-Entwicklungs-API-Schnittstellencode-Sharing
So rufen Sie mit PHP die API-Schnittstelle auf, um die Wetterabfragefunktion zu implementieren
Das obige ist der detaillierte Inhalt vonSo entwickeln Sie ein Beispiel für die Sicherheitsüberprüfung einer API-Schnittstelle mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!