2011-01-20 12 views
1

Im APIを使用しています。 apiはiphoneアプリケーションで使用されます。リプレイ攻撃からAPIを保護する

apiにログインする必要があります。私たちはasp.netフォーム認証でそれを保護します。クライアントは、今後のリクエストに再送信するためにクッキーを取得します。

私たちはhttpsを使用していますが、依然としてリクエストを再生することができます。クッキーは最初にログインしたクライアントでのみ使用できるように、どうすれば保護できますか?

私は、リクエストごとにクッキーを更新することを考えていました。しかし、アプリはいくつかの非同期リクエストを送信することがあります。だからうまくいかない。

/パトリック

答えて

1

任意のアクションは、例えば、再生することができるならば、おそらくあなたは気にしませんおそらく非重要な情報を得る非同期要求。

さらに、重要度の高いアクションが発生する前に、本物の再ログインをアプリに要求することができます。

ネットで認証秘密(パスワード)を交換しないことを願っています。代わりに、アプリにチャレンジ文字列を送信すると、アプリはパスワードを使用してエンコードして返信します。サーバーは同じことを行い、結果を比較します。この操作は、重要なアクションが発生する前に繰り返され、重要なアクションの一部としても繰り返されます。応答は秘密にコード化されて送信されます。盗聴者が秘密を知っていない限り、彼は幸運から行動を再現します。なぜなら、サーバーによって送信される挑戦は異なるからです。

いいえ、このスキームがasp.net認証メカニズムにうまく収まるかどうかはわかりません。

0

クライアントが暗号化またはハッシュで保護されたシーケンス番号とタイムスタンプを各トランザクションで送信し、サーバー側で重複がないかどうかを確認する可能性があります。

+1

タイムスタンプは、両端でクロックが同期されている場合にのみ機能し、それでも差異を考慮するには「スラックウィンドウ」を残す必要があります。 – Marcin

0

アプリケーションにSSL接続を使用して、誰もがCookieを盗み出さないようにするのとは別に、盗難された認証Cookieを使用するリプレイ攻撃を防ぐ偽の方法はありません。

クッキーの有効期限をかなり短く設定し、ユーザーがそのタイムアウト後に資格情報を再入力する必要があります。理想的には、これはスライディングウィンドウですが、実際にユーザーの目を覚ましてもかまいません。

関連する問題