APIの設計アンチリプレイ攻撃

リプレイ攻撃を防ぐためにHTTPSデータの暗号化はどうか?

いいえ、暗号化が効果的に監視されている平文データを防ぐことができますが、リプレイ攻撃を防ぐことができませんでした。

アンチリプレイメカニズム

インタフェースは、ユーザがリプレイ攻撃の恐怖を傍受したとき私たちは、インタフェースを設計します。それは何リプレイ攻撃ですか?これは、データベースの操作に通常のロジックがある場合はそのままで1回、2回... n回は、通常の要求は、通常のロジックの検証に入力されている再送信あなたの要求にあり、その後、一度書かれた文のデータベースに挿入よく、重複データの数が発生する可能性があります。クエリ操作が比較的遅いと、それは、ブロッキングや他のデータベースにつながる可能性があります。
支払インターフェース、またはインターフェースは、購買の損失につながる
要求を検証するためのアンチリプレイメカニズムを行う必要があります。

タイムスタンプ+ナンス

私たちは、再生機構の再生メカニズムを行うには、タイムスタンプとnonceを使用することです防止するために使用されます。
現在のタイムスタンプの要求、そしてもちろんのタイムスタンプを示すタイムスタンプ、サーバーのタイムスタンプを修正しました。私たちは、タイムスタンプパラメータは(高々普通の人が唯一秒ごとに1つの操作を行うことが期待)が異なると、通常の要求を期待しています。各要求と現在の時刻とタイムスタンプは、特定の所定の時間を超えることができません。このような60年代のように。このように、要求が傍受された場合でも、あなたは唯一の60代での攻撃を再生することができます。期限切れ。
しかし、これは十分ではありません、攻撃者の60代のための時間はまだあります。だから我々はナンス、nonceを使用する必要があります。
ナンスは、MD5(タイムスタンプ+、ランド(0ように、十分にランダムに生成するために、クライアントは、係るケースで 1000)); UUIDを使用してもよいし、必要があると、通常の状況下で、短時間で連続的(例えば、60秒間)ノンス場合二つの同一ほぼゼロを生成します。

サーバー

、そうでない場合、文字列2のナンス{}キーを作成し、故障時にキーとタイムスタンプを確認:ナンスのためのキーがあるかどうかを見つけるために1つのRedis:初めてサーバは、以下の行為を行うためのnonceを受信したとき同じ時間の失敗は、このように60年代です。3がある場合は、60年代に記載のキーが使用されており、その要求は、再生要求と判断することができます。

ですから、例えば、以下のリクエスト:
HTTP://a.comはuid = 123&TIMESTAMP ...?
この要求は、私たちは本当に合格する必要が有意義UIDパラメータであり
、タイムスタンプ、ナンスを署名に署名し、リプレイを防ぐように設計されています使用しています。
タイムスタンプは、インタフェースを送信する時間は、ナンスはランダムな文字列で、記号は、UID、タイムスタンプ、ノンス(休息スタイルのAPIのために、私もサイン署名にURLをお勧めします)です。署名方式はMD5({宮尾} KEY1 = VAL1&KEY2 = VAL2かもしれ &KEY3 = val3は...)
要求受信サーバ:A署名を署名検証が合理的である、認証要求パラメータは半2再検証タイムスタンプの有効期限が切れた改ざんされていません要求は、最近発行されたnonce 60年代を検証するために、最後の3にあるかどうかを証明することが要求における再生要求が60年代ではないことが判明しました

レベルも攻撃を防ぐために確認コードや他の方法をスライド、トークンの方法を追加したWebページ、携帯電話のコードで使用することができます

おすすめ

転載: www.cnblogs.com/wadhf/p/11728144.html