Heim > Artikel > Backend-Entwicklung > So stellen Sie die Sicherheit der PHP-Schnittstelle sicher
Die Sicherheit der Schnittstelle basiert hauptsächlich auf den drei Mechanismen Token, Zeitstempel und Signieren, um sicherzustellen, dass die Daten der Schnittstelle nicht manipuliert und wiederholt aufgerufen werden. Schauen wir uns das genauer an unten:
(1) Token-Autorisierungsmechanismus: (Token ist der Berechtigungsnachweis für den Client, um auf den Server zuzugreifen) – Nach dem Der Benutzer meldet sich mit Benutzername und Passwort an, der Server gibt ein Token an den Client zurück (normalerweise UUID) und speichert Token-Benutzer-ID in Form von Schlüssel-Wert-Paaren im Cache-Server. Nach Erhalt der Anfrage führt der Server eine Token-Verifizierung durch. Wenn das Token nicht vorhanden ist, ist die Anfrage ungültig. (Empfohlenes Lernen: PHP-Programmierung vom Einstieg bis zur Beherrschung)
(2) Zeitstempel-Timeout-Mechanismus: (Der Signaturmechanismus stellt sicher, dass Daten nicht manipuliert werden) Jeder Benutzer Jede Anfrage trägt einen Zeitstempel der aktuellen Zeit. Der Server empfängt den Zeitstempel und vergleicht ihn mit der aktuellen Zeit. Wenn die Zeitdifferenz größer als eine bestimmte Zeit ist (z. B. 5 Minuten), wird die Anfrage als ungültig betrachtet. Der Zeitstempel-Timeout-Mechanismus ist ein wirksames Mittel zur Abwehr von DOS-Angriffen.
(3) Signaturmechanismus: Fügen Sie Token und Zeitstempel zu anderen Anforderungsparametern hinzu und verschlüsseln Sie es dann mit dem MD5- oder SHA-1-Algorithmus (Sie können je nach Situation etwas Salz hinzufügen). Für die Signatur dieser Anforderung verwendet der Server denselben Algorithmus, um die Signatur nach dem Empfang der Anforderung zu erhalten, und vergleicht sie mit der aktuellen Signatur. Wenn sie unterschiedlich ist, bedeutet dies, dass die Parameter geändert wurden und ein Fehler vorliegt ID wird direkt zurückgegeben.
/** * @desc 接受参数处理 */ private function dealParam(){ //接受header参数--系统参数 $systemParam=getAllHeadersParam(); //接受body数据--业务参数(json格式) $data=file_get_contents('php://input'); //读取配置文件中的私钥信息 $api_apiKey=C('api_apiKey'); $privatekey=$api_apiKey[$systemParam['token']]; $arr['token'] =$systemParam['token']; //服务端分配的标识(不同客户端需使用不同的标识) $arr['timestamp']=$systemParam['timestamp']; //时间戳,UTC时间,以北京时间东八区(+8)为准 $arr['version'] =$systemParam['version']; //版本号 $arr['sign'] =$systemParam['sign']; //签名 $arr['source'] =$systemParam['source']; //来源(0-安卓/1-IOS/2-H5/3-PC/4-php/5-java) $arr['data'] =json_decode($data,true); //业务参数json格式 $arr['method'] =$data['method']; //访问接口,格式:模型名.方法名 return $arr; }
/* * @desc 获取所有以HTTP开头的header参数 * @return array */ private function getAllHeadersParam(){ $headers = array(); foreach($_SERVER as $key=>$value){ if(substr($key, 0, 5)==='HTTP_'){ $key = substr($key, 5); $key = str_replace('_', ' ', $key); $key = str_replace(' ', '-', $key); $key = strtolower($key); $headers[$key] = $value; } } return $headers; }rrree
Das obige ist der detaillierte Inhalt vonSo stellen Sie die Sicherheit der PHP-Schnittstelle sicher. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!