分析インターフェイス
クライアント インターフェイス送信ルール:
1. cmd パラメーター (base64) を使用して、別のインターフェイスを動的に呼び出すの場合、インターフェースアドレスは http://a.lovexpp.com に統一されます。
2. 配列に渡されるパラメータを形成し、タイムスタンプ要素 (現在のタイムスタンプ、秒まで正確) を配列に追加し、配列のキー値を大きいものから小さいものまで並べ替えます。自然順序に従って
3. 配列を key=val&key=val の形式の文字列に形成し、その文字列を XPP_KEY に接続し、md5 (32 ビットの小文字) で一度暗号化し、署名を取得します。
4. 配列内のパラメーターに符号を追加します
5. パラメーター配列を json に変換し、ポスト リクエストを使用してインターフェイス アドレスを要求します。キー値は param
サーバー インターフェイスの解析ルール:
1. パラメーター param を受け取り、結果を json に解析してパラメーター配列を取得します
2. 記号を取り出し、削除しますパラメータ配列の符号
3. パラメータ配列のキー値を大きいものから小さいものへ自然な順序で並べ替えます。 Small sort
4. 並べ替えられたパラメータ配列を文字列に結合します。 key=val&key=val の形式で、文字列を XPP_KEY に接続し、md5 (32 ビットの小文字) で一度暗号化し、sign
5 を取得します。その符号を、クライアントによって渡された符号と比較します。それらは異なります。パラメータはプロセス中に改ざんされた可能性があり、サーバーはリクエストを拒否します。
6. サインをセッション内のサインと比較します。同じ場合、それは繰り返し送信されます。そして、サーバーはリクエストを拒否します
7。今回、署名はセッション
8に保存されます。ルーティングcmdを実行し(base64解析後)、パラメータをこのメソッド内に渡します
<?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; }
推奨チュートリアル: PHP ビデオ チュートリアル
以上がPHPインターフェースを暗号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。