2012-02-24 1 views
0

私はHTTP Webサーバー上で安全なトランザクションを作成する必要があるプロジェクトを持っています。私は完全にクライアント(モバイルアプリケーション)を制御し、サーバーを制御します。クライアントがサーバーのデータベースに格納されている値を追加または減算できるシステムを開発したいと考えています。格納された値は通貨ベースであるため、数値が正確であることが重要です。私の質問は、誰かがHTTPトラフィックを再現し、自由に値を削除または追加することを防ぐ方法です。誰かがクライアントからパケットを取得し、サーバーの通貨の値に変更するために必要なHTTP POSTパラメータを表示し、いつでもそれらのパケットを再現することができます。HTTPトラフィックを再現性のないように強化するアイデア

私の最初の考えは、クライアントに新しい通貨の値を公開鍵で暗号化してから、サーバーにそれを秘密鍵で復号化させることでした。また、タイムスタンプとそのユーザー名を新しい通貨の値とともに埋め込んで暗号化してから、リクエストが常に異なるようにします。その後、サーバーはタイムスタンプをチェックして、それが過去10秒であれば拒否します。このアプローチの1つの問題は、クライアントまたはサーバが同期時間に基づいていない場合です。サーバはNTPと同期されますが、クライアントが正しくなるという保証はありません。

他のアイデアをいただければ幸いです。私は低レベルの実装の詳細を探しているわけではなく、高レベルの概要だけを探しています。理想的には、トランザクションのレートが高くなるため、ソリューションはクライアントまたはサーバーのどちらにも課税されません。

答えて

2

一般的なセキュリティチップを使用する必要があります。それは野生で出ていた場合は、クライアントを制御するわけではありません!サーバは、クライアントが送信するすべてを確認する必要があります。

シンプルな流れ:

  • クライアントが「セッション」を設定し、SSL経由でユーザー名/パスワードを使用してサーバーに接続します。
  • クライアントは、
  • Serverは、ログインしているユーザー がこれを行うには許可されていることを、
  • Serverは要求が有効であるチェックSSL接続を介してこの要求を受けた(量Yによって増分製品X)が実行するコマンドを送信しますコマンドを実行し、失敗または成功を示す クライアントに応答を送信します。
  • クライアントは接続を切断し、「セッションが終了しました」というメッセージを送信します( セッションも一定期間後にタイムアウトする必要があります)。

注: すべてが認証され、サーバー側でチェックされている必要があります。あなたのクライアントアプリケーションは、「有効な」リクエストとは何かを調べる作業を担当するものではいけません。それがサーバの仕事です。各要求はSSLを経由しなければならず、クライアントが正常にログオンしてセッションを開始した場合にのみ実行する必要があります。タイムスタンプベースのチェックであっても、ユーザーはリバースエンジニアリングや中間者攻撃を使用することができますが、ユーザー名/パスワードを持っている(または正当なクライアントのデータを傍受できる - SSL /公開鍵/秘密鍵システム)。非常に強力なセキュリティが必須である場合、クライアントからのすべての要求はRSAによって暗号化されるべきです。

関連する問題