2016-04-30 27 views
3

私は、以下のロジックを使用してクライアントリクエストを認証するセキュリティカスタムリストフィルタを使用しました。ヘッダ内リプレイ防止REST URLのリプレイ攻撃

ヘッダフィールド

  1. HMACハッシュ署名

ボディ

  1. HMAC暗号化されたデータ

iOSクライアントはPOSTを使用してこのリクエストを行い、サーバでは の有効期限が15秒に設定されています。

今、誰もがチャールズまたは他の 何かのようなデバッグツールを使用した場合の質問は、と彼はURLと 火15秒と同じにブレークポイントを置くために発生した場合、nonceが有効であるとするサーバー プロセス2回目のリクエスト。これを防ぐにはどうすれば が起こるのでしょうか。この場合、ノンスは機能しません。ハッカーが 発射されようとしている最後のURLを取得した場合、一回だけの有効期限が切れる前に、彼はそれを複数回 を発射する可能性もあることができ、アプローチでどのような

......

これを防ぐ方法を教えてください。

誰にでも私にとって最高の春のセキュリティ実装を見つけるのを助けることができますか?

また、HTTPSはデフォルトでリプレイ攻撃から私たちを守っていますか? SSLクライアント側の検証(ビルド でフォーマット証明書を取得し、サーバ証明書でこれを検証する必要がありますか)を実行して、再生攻撃がhttps で動作するようにしますか?またはデフォルトでhttpsで利用可能ですか?

つまり、私はAFNetworkingを使用しています。SSLを使用する必要があります https再生攻撃を利用するために固定しますか?または ssl固定なしで動作しますか?

答えて

6

HTTPSを使用してREST APIを呼び出す場合は、ネットワークレベルでthe protocol protects you from replay attacksを使用します。つまり、誰かが暗号化されたトラフィックを記録してそれを正常に再生することはできません。

しかし、正当なクライアントが同じリクエストを複数回発行しないようにする方法を探している場合は、そのリクエストをidempotentにするか、ビジネスロジックに再生メカニズムを実装する必要があります。これはnonceを使用して行うことができます。ナンスは期限切れではありませんが、1回のトランザクションでのみ使用できます。

+0

httpsとiOS AFNetworking SDKを使用してリクエストを送信しています。 Nginxサーバーは、HTTPS接続のみを受け入れるように構成されています。しかし、クライアントでhttpをhttpsに変更するだけでは、ネットワークセキュリティの権利は得られません。クライアントは、セキュリティの権利を提供するssl暗号化を提供するためにハンドシェイク/ ssl検証を持っていなければなりません。私が問題に直面しているので、ハッカーはCHARLESデバッガを使用しており、重複した要求を発し続けます。以前はヘッダーにhmac ecryptionがあり、身体は暗号化されていませんでした。今度はbodyのAES暗号化とヘッダのhmac暗号化を追加し、timestapを使ってnonceを生成しました。 – Kenshin

+0

は120秒で期限が切れます。私には分かりませんが、httpsをhttpsに変更するだけでセキュリティが提供されますか?または、AFnetworkingのSSL Pinningオプションを使用してクライアントSSL検証が必要ですか。 – Kenshin

+0

MvdD、nonce(1回だけ使用された番号)は期限切れではないと述べました。タイムスタンプを特定の秒/分または時間の頭に設定することでナンス自体が生成されます。最終的なURLを取得し、ノンスの有効期限が切れる前に発射すれば、リプレイ攻撃(ここではhttpsを除く)をプレイすることができますか? – Kenshin

関連する問題