APIインターフェイスのセキュリティ検証

フロントインターフェイスを呼び出したい、あなたは署名を生成するためにいくつかのパラメータを使用する必要があります。

タイムスタンプ:現在時刻

乱数:ランダムに生成された乱数

パスワード:台湾の発展の前と後に、両側がロゴを知って、同等の信号

ルールアルゴリズム:上記の3つのパラメータの操作の-agreedルールが署名アルゴリズムルールを生成するために利用することができます。

必要性はURLによって背景に渡されたインタフェース、タイムスタンプ、乱数、署名にアクセスする際にレセプションには、署名を生成します。背景は、データを返すために、同一の、署名アルゴリズムのルールによって計算されたタイムスタンプ、乱数を取得し、その後、署名比較上を通過します。

アルゴリズムのルール

楽屋インタラクティブ最初に、アルゴリズムのルールは非常に重要であり、アルゴリズムによって計算前面と背面には、ルールを開発する方法のように、あなたはどのように来てどのように幸せな参照、署名を排除する必要があります。

私のルールは、このアルゴリズムであります

タイムスタンプ、乱数は、最初のパスワードは、注文総額をソート

図2は、文字列内にスプライシングされます

3 SHA1の暗号化

4その後、暗号化されたMD5

大文字に5。

レセプション

ここで私は、直接使用するのは本当の見通しPHPファイルの代わりに、フォアグラウンドを持っていないし、その後CURL GETリクエストによってシミュレート。私はTPフレームワークを使用しています、URLの形式は形式パス情報です。

ソース

<?PHP 
/ ** 
 * PhpStormによって作成されます。
 *ユーザー:管理者
 *日:2019年3月16日
 *時間:15時56分
 * / 
コントローラ\名前空間のクライアント; 
を使用することは、コントローラの\考える; 
クラスClientControllerは、コントローラーが{拡張
 '= TOKENをCONST API「; 
 //サーバ要求受信アナログインタフェースAPI 
 パブリックgetDataFromServer関数(){ 
  //タイムスタンプ
  $ = timeStampに時間(); 
  //乱数
  $ $ = randomStrこの- > createNonceStr(); 
  //は、署名生成
  $署名を=この$ - >算数(タイムスタンプ$、$ randomStr); 
  // URLアドレス
  $のURL =「http://www.apitest.com/Server/Server/respond/t/{$timeStamp}/r/{$randomStr} / S /署名} {$「; 
  $この結果= $ - > HTTPGET(URLの$)。 
  ダンプ($結果); 
 } 
 //カールシミュレーションを要求します。
 機能HTTPGETプライベート(URLの$){ 
  $カール= curl_init(); 
  //必要なアドレス要求
  ;ますcurl_setopt($カール、CURLOPT_URL、 $のURL) 
  出力が//要求されたデータファイルを示しますが、変数にストリーミングされています
  ますcurl_setopt($カール、CURLOPT_RETURNTRANSFER ,. 1); 
  $結果= curl_exec($カール); 
  curl_close($カール); 
  戻り$結果は; 
 } 
 ランダムに生成//ストリング
 プライベート関数createNonceStr(長さ= $ 8){ 
  $ =の文字" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; 
  $ STR =は"「; 
  のために{($ I = 0; $ I ++; $ Iは$長<)
   $ STR =のSUBSTR( - 1),. 1 $文字、strlenをmt_rand(0、($文字を))。 ; 
  } 
  。 "Z" STR $を返す; 
 } 
 / **
  * @Param $タイムスタンプスタンプ
  * @Param $ randomStrランダムな文字列
  * @return列戻り署名
  * / 
 プライベート算術関数(タイムスタンプ$、$ randomStr){ 
  $ ARR [ 'timeStampに'] = $ timeStampに; 
  $ ARR [ 'randomStr'] = $ randomStr; 
  $ ARR [ 'トークン']自己:: =トークン; 
  //最初の総額は順番を並べ替え
  ($ ARR、SORT_STRING)ソート; 
  //文字列の中にスプライス
  $ = STR破($のARR); 
  //暗号化
  $署名SHA1 =($のSTR); 
  $署名= MD5($シグネチャ); 
  //大文字
  $ strtoupper署名=($シグネチャー); 
  戻り$シグネチャー; 
 } 
}

 

サーバー側

検証のためのフォアグラウンドデータを受け入れます

ソース

<?phpの
/ ** 
 * PhpStormによって作成されます。
 *ユーザー:管理者
 *発売日:2019年3月16日0016 
 *時間:16時01分
 * / 
名前空間サーバー\コントローラ。
\コントローラを考えて使用します。
クラスServerControllerコントローラー{延び
 CONST TOKEN = 'APIを'; 
 //响应前台的请求
 パブリック関数応答(){ 
  //验证身份
  $ timeStampに= $ _GET [ 'T']。
  $ randomStr = $ _GET [R '']。
  $署名= $ _GET [ 'S']。
  $ STR = $この- >演算($タイムスタンプ、$ randomStr)。
  もし(!$ strの= $署名){ 
   エコー"-1"; 
   出口; 
  } 
  //模拟数据
  $ arrが[ '名前'] = 'API'; 
  $ [ '年齢'のARR
  $ [ 'アドレス'をARR 
  $ ARR [ 'IP'] = "192.168.0.1"; 
  エコーjson_encode($のARR); 
 } 
 / ** 
  * @paramタイムスタンプの$ timeStampに
  * @param $ randomStrランダム文字列
  * @return列戻り署名
  * / 
 パブリック関数演算(タイムスタンプ$、$ randomStr){ 
  $ ARR [ 'timeStampに'] = $ timeStampに; 
  $ ARR [ 'randomStr'] = $ randomStr; 
  $ ARR [ 'トークン']セルフ:: TOKEN =; 
  //最初の総額ソート順
  の並べ替え($ ARR、SORT_STRING); 
  //文字列の中にスプライス
  $ = STR破($のARR); 
  暗号化する// 
  $署名= SHA1($ strの) ; 
  $ = MD5署名($シグネチャー); 
  //大文字に変換
  ; $署名= strtoupper($シグネチャー)
  リターン$署名を。
 }
}

結果

ストリング(57) "{" 名前 ":" API " "年齢":15、 "アドレス": "ZZ"、 "IP": "192.168.0.1"}"

 

おすすめ

転載: blog.csdn.net/PKyourself/article/details/93462578