サンプル章第四版の第23章カスタムPHPインターフェース仕様を「PHPは手の込んだ」5

安全制御インタフェース仕様23.3

セクション23.2の例には、シンプルなインターフェイスを実装していますが、この時点では、このインタフェースは、「ストリーキング」です。誰もがこのインターフェイスを要求することができますので、私たちのクライアントだけでなく、データにアクセスすることができ、誰かがそのようなシオマネキ、Wiresharkのおよびその他のパケットキャプチャツールとして使用している場合、このAPIのアドレスを取得するのは簡単です、あなたは自由に入手または当社のデータを改ざんすることを要求することができます、それは明らかに安全ではありません。インタフェースを設計するときしたがって、セキュリティ管理のこの部分に追加されなければなりません。

 

23.3.1 APIセキュリティ管理の原則

ウェブAPIは、インターネットベースのアプリケーションなので、セキュリティ要件がローカルアクセスデータベースよりもはるかに厳しいので。一般的な一般的な方法は、暗号署名方式は、送信パラメータは、暗号化された署名を追加すると、サーバ側コンテンツに署名を検証する、すなわちパラメータ転送を使用し、改ざんを防止。一般的なアクセスインターフェース、ユーザーはデータのみにアクセスすることを許可チェックすることにより、トークンIDを使用確認する必要があります。使用API​​のセキュリティコントロールの原則は次のとおりです。

(1)ユーザー名とパスワードを使用して。これは、正の識別情報(例えば、ユーザ情報、パスワード、アクセス権、またはインターフェイス関連する)ユーザとすることができる、比較的簡単です。認証が成功すると、関連するデータを返します。

(2)セキュリティ署名の使用。このように提出されたデータ、URLの接続パラメータは、セキュリティ暗号化の特定のルールを通過することです、サーバーはデータも安全にデータを半後に改ざんされていないことを確認するために同じ規則によって暗号化し、データの処理を変更している受け取ります。したがって、我々はそのような別のキーを指定するためのさまざまなアクセス方法などのWeb、アプリケーション、などさまざまなクライアントのためにすることができますが、キーは両側が伝送ネットワークに接続されていない同意したということです、トランスミッションを接続することは、一般的にアクセス可能「キー」でありますサーバーは、署名パラメータ「キー」を比較することによって、これを暗号化します。現在、マイクロ文字のコールバック処理機構舞台裏、この方法で使用されています。

(3)公衆インターフェース呼び出し、ユーザがトークン、または暗号署名パラメータを渡す必要はなく、このインタフェースは、一般的に小さいが、一部のデータのみを提供することが一般的です。

 

23.3.2 APIのセキュリティは、単純な実装手順を制御します

多くのセキュリティ制御APIの方法がありますが、あなたは自分の状況を投影するに従って、大きなプラットフォームアルゴリズム処理インタフェースの一部から学ぶことができ、いくつかの方法をカスタマイズすることができます。このセクションでは、いくつかの単純な制御方法、セキュリティ、アクセス制御APIを達成するためのステップバイステップを提供します。

1。スタンプパラメータを増やし

まず、私たちは、このような「タイムスタンプ」として、APIのURLパラメータにタイムスタンプを追加し、インターフェイスを要求するときは、このパラメータを追加する必要があります要求しているクライアントが必要です。このパラメータは、要求の時点で存在しない場合は、データを返しません。また、タイムスタンプパラメータによって、あなたはそれがインターフェイスアドレスは、彼らが唯一のいくつかの時間のために使用できることが判明した場合でも、要求インタフェースは、時間の期間内に完了しなければならない制限することができます。次のようにタイムスタンプパラメータを添加した後、URLリクエストインターフェイスアドレスの形式は次のとおりです。

 

HTTPS://localhost/userapi.php ID = 1&タイムスタンプ= 1519552181?

   

 

Userclient.php前の例では、ファイルを変更し、()二つのインターフェースuserapi.php要求に加え、「タイムスタンプ」のパラメータでURL、一度のないパラメータを取得するために使用されました。以下のコードフラグメントを変更した後。

b50e061b719046a6888540f94603f674.png

userapi.phpインタフェースファイルを修正同様に、要求は、「タイムスタンプ」パラメータを使用して、要求のURLかどうか、界面で決定され、5分以内にのみ有効なURLを制限します。次のようにフラグメントは、更新日:

04a9b07159e84289870dec82f9ea6147.png

図の操作は、23-8の結果。

8cad9dd59f0d49578d511ea668c9dffa.png

URLパラメータAPI 23-8は、タイムスタンプ付きテストの結果を要求します

 

我々は、データを取得するには、「タイムスタンプ」引数を追加するためのクライアントソフトウェアのAPI要求を実現するが、他の人が追加できるようにあなたはまだ、パケットキャプチャツールでアドレスを見ることができるので、これはまだ、他の人が私たちのデータを取得防ぐことはできませんが「タイムスタンプ」パラメータは、当社のインターフェースを要求します。アクセスを制限するだけで平均プログラマをだますことができ、少し慎重なプログラマは、このルールを見つけるだろう、彼は現在のタイムスタンプを生成することができ、その後、シミュレーションパラメータは、データを取得するための要求を送信します。

 

2.増加シグニチャパラメータ

API呼び出しのデータが改ざん、盗難URLを防ぐために、クライアントアプリケーションとAPIサーバ間の安全な通信を確保するために、要求を送信、およびその他の悪意のある攻撃は、あなたは、APIのルールでパラメータ署名検証メカニズムを使用することができます。APIを呼び出す前に、クライアント・アプリケーション・プロセスは、暗号化された署名は、アルゴリズムによって計算され、パラメータ名は「署名」することができますリクエストパラメータに追加する必要があります。、要求を受信し、同じアルゴリズムを再計算署名を使用して、その値が、それによって現在のAPI呼び出し要求が第三者と偽造または改ざんされたか否かを決定し、パラメータ値を「署名」への転送アプリケーションと一致しているか否かを判断する際のAPIサーバー。

多くの署名アルゴリズムは、このセクションの署名アルゴリズムシミュレーションアリペイ。「たとえば、ルールを開発した後、すべてのURLパラメータを抽出すること、およびその後、パラメータ名に基づいてソート、文字列の配列にスプライスして、ソートされ、最終的には、文字列のMD5またはSHA1の暗号化(推奨SHA1)が取得記号」。たとえば、私たちの現在のURLは次のとおりです。

 

http:?//localhost/userapi.php ID = 1&タイムスタンプ= 1527068730

 

(1)パラメータの配列を得た:[ 'タイムスタンプ' => 1527068730、 'ID' => 100]。

(2)ASCIIキーコードソートの名称:[ 'ID' => 100、 'タイムスタンプ' => 1527068730]。

(3)文字列の組み合わせ:ID = 100timestamp = 1527068730。

(4)SHA1()関数を使用してfd8cc3348652b9cbf2714689ab7ee9105da67cf4を暗号化することによって得られます。

次のようにクライアントとサーバーAPI署名リクエストのURLアドレスの同じ計算方法が計算されます。

 

http://localhost/userapi.php ID = 1&タイムスタンプ= 1527068730&サイン= fd8cc3348652b9cbf2714689ab7ee9105da67cf4?

   

Userclient.phpを使用した、前の例では、ファイルを修正し続け、次いで、get()メソッド三回userapi.phpリクエストインタフェース、最初は、第2のエラー「記号」パラメータを使用して、「サイン」パラメータを追加していないし、第三のすべての正しいパラメータを使用して。そして、上記のパラメータによって「記号」アルゴリズムを生成します。以下のコードフラグメントを変更した後。

9e0aebb968934a4981c505f77b390e55.png

同様に、userapi.phpインタフェースファイルを変更し、要求が「記号」パラメータを使用して、要求されたURLかどうかを、界面で決定され、クライアント・コンピューティング・署名同じアルゴリズムを使用して、受信したURLとクライアント「サイン」パラメータ同じデータが返された場合、エラーメッセージが返され改ざん場合、マッチングは、それは異なっていてもよいです。以下のコードフラグメントを変更した後。

46db409a066c4fd6a45596a41b65dc95.png

 

図23-9に示す操作結果:

e1a32f8f699e42d2a2a0c18fc3ba4a26.png

図URLパラメータAPI 23-9は、の記号でテストの結果を要求します

パラメータを署名することにより、大幅にインターフェイスを要求する他のない自由で、インターフェイスのセキュリティを向上させることができます。一部の人々はまた、インターフェイスアドレスをリッピングすることができますが、我々はデータのみのこの部分を取得することができますが、他のデータを要求することはできません。例えば、誰かがそれだけで物品1のIDを取得することができ、上記の例のインターフェイスアドレスをつかみました。一度パラメータが変化するためと5分以内に、それは、記事ID 100のパラメータを変更することによって得ることができず、「記号」パラメータチェックは失敗します。アリペイは、取引の額容易に変更することを避けるために、そうするためのインタフェースです。

 

トークンの3.導入

「タイムスタンプ」と「署名」パラメータの追加が、インターフェイスは比較的安全ですが、それを利用した、人々は暗号化ルールを知っていれば(もちろん、など逆の並べ替え、またはダブル-SHA1の暗号化、などのルールを、変更することができます)、リスクが残っています「記号」を取得するためのルールの暗号化パラメータ、その後、他のデータを取得することができます。そのため、従来の値である「トークン」の他の要素を導入する必要性は、「記号」の同等は、実際にランダムな文字列の唯一のクライアントとサーバーのノウハウです。クライアントは、コードがコンパイルされたアプリケーション、ある場合はもちろん、これは、ユーザーが表示されていないクライアントで文字列を「トークン」、クライアントがないユーザーにサーバー上で、PHPプログラムを使用しています。「トークン」の導入は、ジャストで計算記号に追加ランダムな文字列を入れて、あなたは再びインターフェイスのセキュリティを向上させることができます。署名操作に、上記の例では、「トークン」の導入をファイルを変更していきUserclient.php。以下のコードフラグメントを変更した後。

0e5b6ff6d20d4358bebfca3c67933ec6.png

前の例のファイルを修正し続けるUserapi.php、同じコンテンツは、署名計算に同一の「トークン」に導入されます。以下のコードフラグメントを変更した後。

eb2b54b48a014f6fa9b5a1bb4969aab2.png

再び実行した後、およびそれを実行している例で得られた結果。これまでのところ、我々は比較するのに安全なインタフェースとなっている、他の人が私たちのインターフェースを要求したいと思います、我々は可能性が低すぎることを、私たちの署名の暗号化ルールとランダム「トークン」の文字列を知っている必要があります。

 

 

おすすめ

転載: www.cnblogs.com/itxdl/p/11456811.html