ホームページ  >  記事  >  バックエンド開発  >  PHPインターフェースを暗号化する方法

PHPインターフェースを暗号化する方法

王林
王林オリジナル
2019-09-26 17:39:372734ブラウズ

PHPインターフェースを暗号化する方法

分析インターフェイス
クライアント インターフェイス送信ルール:
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[&#39;param&#39;] , true);

//取出sign,去掉参数数组中的sign
$client_sign = $param[&#39;sign&#39;];
unset($param[&#39;sign&#39;]);

//将参数数组key值按照自然排序从大到小排序
krsort($param);

//将排序后的参数数组按照key=val&key=val的形式组成字符串,将字符串与XPP_KEY连接,用md5加密一次(32位小写),得到sign
$sb = &#39;&#39;;
foreach($param as $key=>$val){
$sb .= $key . &#39;=&#39; . $val . &#39;&&#39;;
}
$sb .= $xpp_key;
$server_sign = md5($sb);

//将sign与客户端传过来的sign进行比对,如不一样则可能是中途被篡改参数,服务器拒绝此次请求
if($server_sign !== $client_sign){
echo json_encode(array(&#39;code&#39;=>&#39;invalid request&#39;));
exit;
}

//将sign与session中的sign对比,如果一样,则为重复提交,服务器拒绝此次请求
if($server_sign == $_SESSION[&#39;last_sign&#39;]){
echo json_encode(array(&#39;code&#39;=>&#39;Repeated requests&#39;));
exit();
}

//此次的sign存入session
$_SESSION[&#39;last_sign&#39;] = $server_sign;

//执行路由cmd(base64解析后),将参数带到该方法中
$cmd = base64_decode($param[&#39;cmd&#39;]);
list($__controller,$__action) = explode(&#39;-&#39; , $cmd);

// 设置请求参数
unset($param[&#39;cmd&#39;]);
unset($param[&#39;timestamp&#39;]);
foreach($param as $key => $val){
$_REQUEST[$key] = $val;
}

推奨チュートリアル: PHP ビデオ チュートリアル

以上がPHPインターフェースを暗号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。