Maison >développement back-end >Problème PHP >Comment chiffrer l'interface php
Interface d'analyse
Règles de transmission de l'interface client :
1. Utilisez le paramètre cmd (base64) pour appeler dynamiquement différentes interfaces. , l'adresse de l'interface est unifiée comme http://a.lovexpp.com.
2. Formez les paramètres à transmettre dans un tableau, ajoutez l'élément d'horodatage (horodatage actuel, précis en secondes) au tableau et triez les valeurs clés du tableau de grand à petit en fonction. l'ordre naturel
3. Formez le tableau en une chaîne sous la forme key=val&key=val, connectez la chaîne avec XPP_KEY, cryptez-la une fois avec md5 (minuscules 32 bits) et obtenez sign
4. Ajoutez un signe au paramètre
dans le tableau 5. Convertissez le tableau de paramètres en json et utilisez la requête de publication pour demander l'adresse de l'interface. La valeur clé est param
<.>Règles d'analyse de l'interface serveur :
1. Recevez le paramètre param, analysez le résultat en json pour obtenir le tableau de paramètres 2. Retirez le signe, supprimez la connexion. le tableau de paramètres 3. Triez les valeurs clés du tableau de paramètres dans l'ordre naturel du grand au petit Petit tri4 Combinez le tableau de paramètres trié en une chaîne sous la forme de. key=val&key=val, connectez la chaîne avec XPP_KEY, cryptez-la une fois avec md5 (minuscules 32 bits) et obtenez sign5. Comparez le signe avec le signe transmis par le client. , les paramètres peuvent avoir été falsifiés au cours du processus, et le serveur rejette la demande 6 Comparez le signe avec le signe de la session, si c'est le même, il s'agit d'une soumission répétée et le serveur rejette la. request7. Cette fois, le signe est stocké dans la session8 Exécutez le routage cmd (après analyse base64) et amenez les paramètres à Dans cette méthode,
<?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; }tuto recommandé : Tutoriel vidéo PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!