Lösungen für PHP-API-Sicherheitsüberprüfungsfehler: 1. Verwenden Sie eine PHP-Datei, um das Frontend zu ersetzen. 2. Simulieren Sie GET-Anfragen über CURL. 3. Akzeptieren Sie die Frontend-Daten zur Überprüfung.
Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP7.1, Dell G3.
Was soll ich tun, wenn die PHP-API-Sicherheitsüberprüfung fehlschlägt?
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 abrufen Die zurückgegebenen Daten werden im Allgemeinen in zwei Situationen unterteilt: XML und JSON. Bei diesem Vorgang kennt der Server möglicherweise nicht die Quelle der Anforderung, um Daten abzurufen erforderlich. .
Auf dem Bild ist deutlich zu erkennen, dass die Rezeption mehrere Parameter verwenden muss, um eine Schnittstelle zu generieren, wenn sie die Schnittstelle aufrufen möchte Unterschrift.
Das Frontend generiert eine Signatur, und wenn auf die Schnittstelle zugegriffen werden muss, 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. Sowohl das Front-End als auch das Back-End müssen Signaturen anhand von Algorithmusregeln berechnen wie es dir gefällt.
Die Regeln meines Algorithmus sind
Zeitstempel, Zufallszahl, Passwort werden in der Reihenfolge des ersten Buchstabens sortiert
und dann in eine Zeichenfolge gespleißt
für die SHA1-Verschlüsselung
und dann MD5-Verschlüsselung
In Großbuchstaben umwandeln.
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 < $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; } }
Vordergrunddaten zur Überprüfung akzeptieren
<?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 tatsächlich nur eine der Methoden Es gibt viele Methoden, die zur Sicherheitsüberprüfung verwendet werden können.
Empfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas tun, wenn die Überprüfung der PHP-API-Sicherheit fehlschlägt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!