Heim >Backend-Entwicklung >PHP-Problem >So verschlüsseln Sie die PHP-Schnittstelle
Analyseschnittstelle
Übertragungsregeln für Clientschnittstellen:
1. Verwenden Sie den cmd-Parameter (base64), um verschiedene Schnittstellen dynamisch aufzurufen , die Schnittstellenadresse ist einheitlich als http://a.lovexpp.com.
2. Bilden Sie die zu übergebenden Parameter in einem Array, fügen Sie das Zeitstempelelement (aktueller Zeitstempel, sekundengenau) zum Array hinzu und sortieren Sie die Schlüsselwerte des Arrays von groß nach klein in natürlicher Reihenfolge
3. Bilden Sie das Array zu einer Zeichenfolge in der Form key=val&key=val, verbinden Sie die Zeichenfolge mit XPP_KEY, verschlüsseln Sie sie einmal mit md5 (32-Bit-Kleinbuchstaben) und erhalten Sie ein Vorzeichen
4. Fügen Sie dem Parameter
im Array ein Vorzeichen hinzu. 5. Konvertieren Sie das Parameterarray in JSON und fordern Sie die Schnittstellenadresse mit der Post-Anfrage an. Der Schlüsselwert ist param
Serverschnittstellen-Analyseregeln:
1. Empfangen Sie den Parameter param, analysieren Sie das Ergebnis in JSON, um das Parameterarray zu erhalten
2. Nehmen Sie das Schild heraus und entfernen Sie die Anmeldung das Parameterarray
3. Sortieren Sie die Schlüsselwerte des Parameterarrays in natürlicher Reihenfolge von groß nach klein. Kleine Sortierung
4. Kombinieren Sie das sortierte Parameterarray zu einer Zeichenfolge in Form von key=val&key=val, verbinde die Zeichenfolge mit XPP_KEY, verschlüssele sie einmal mit md5 (32-Bit-Kleinbuchstaben) und erhalte das Vorzeichen
5. Vergleiche das Vorzeichen mit dem vom Client übergebenen Vorzeichen , die Parameter wurden möglicherweise während des Prozesses manipuliert und der Server lehnt die Anfrage ab
6. Vergleichen Sie das Zeichen mit dem Zeichen in der Sitzung. Wenn es dasselbe ist, handelt es sich um eine wiederholte Übermittlung und der Server lehnt die ab Anfrage
7. Diesmal wird das Zeichen in der Sitzung gespeichert
8. Führen Sie den Routing-Befehl aus (nach der Base64-Analyse) und bringen Sie die Parameter auf
<?php $xpp_key = "xxx"; //接收参数param,将结果解析json得到参数数组 $param = json_decode($_POST['param'] , true); //取出sign,去掉参数数组中的sign $client_sign = $param['sign']; unset($param['sign']); //将参数数组key值按照自然排序从大到小排序 krsort($param); //将排序后的参数数组按照key=val&key=val的形式组成字符串,将字符串与XPP_KEY连接,用md5加密一次(32位小写),得到sign $sb = ''; foreach($param as $key=>$val){ $sb .= $key . '=' . $val . '&'; } $sb .= $xpp_key; $server_sign = md5($sb); //将sign与客户端传过来的sign进行比对,如不一样则可能是中途被篡改参数,服务器拒绝此次请求 if($server_sign !== $client_sign){ echo json_encode(array('code'=>'invalid request')); exit; } //将sign与session中的sign对比,如果一样,则为重复提交,服务器拒绝此次请求 if($server_sign == $_SESSION['last_sign']){ echo json_encode(array('code'=>'Repeated requests')); exit(); } //此次的sign存入session $_SESSION['last_sign'] = $server_sign; //执行路由cmd(base64解析后),将参数带到该方法中 $cmd = base64_decode($param['cmd']); list($__controller,$__action) = explode('-' , $cmd); // 设置请求参数 unset($param['cmd']); unset($param['timestamp']); foreach($param as $key => $val){ $_REQUEST[$key] = $val; }
empfiehlt Tutorial: PHP-Video-Tutorial
Das obige ist der detaillierte Inhalt vonSo verschlüsseln Sie die PHP-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!