2011-02-09 14 views
2

私はWCFサービスを開発しており、未承認のユーザーからこのサービスを保護しています。私はサービスにパラメータ "RSAKey"を追加する予定で、クライアント(AddIn)はすべてのリクエストとともにRSAKeyを生成して送信し、サービスはそのIPに対してその時刻に合格したRSAKeyをチェックし、有効である場合にのみサービスを提供します。WCFサービスを保護するための助けが必要です

しかし私の質問は、 "RSAKey"を生成する実際の機能を推測できる場合には、クライアントが(AddIn)を逆コンパイルしても、そのメソッドを呼び出してRSAKeyを生成し、問題なくサービスを使用できる。

有効な/許可されたクライアントによって消費されるサービスを保護する方法はありますか? 注: 私が大切に考えているのは、資格情報なしにクライアントを自由に配布したいということです。しかし同時に、大量のコピー/ミス・サービスの使用から保護したい。

+0

私はこのストレートを持っているかどうかを見てみましょう:既知の敵対的な環境(デコンパイルなど)でクライアントのバイナリを保護したいのですが、クライアントの提供なしにそのクライアントによるサービスの公開を許可したい資格情報*。そうですか? –

+0

@Lars、はい、そうです。しかし、私が提供したクライアントを介してのみ – Veeru

+0

私の問題に答える/解決するために貴重な時間を置いてくれてありがとう誰もがありがとう。実装が難しい場合でも、概念的な考え方も歓迎されます。 – Veeru

答えて

0

IISサーバーによってWCFサービスをホストできる場合は、httpsアクセスを有効にしてクライアントのIPアドレスを取得することもできます。したがって、疑わしい攻撃がある場合にはしばらくの間、アクセスIPを一時停止することができます。

+0

もちろん、メッセージを保護するためにhttpsを使用します。しかし、それはミスの使用からサービスを保護するのに役立ちません。私の場合、攻撃の疑いを認識するのは難しいです。あなたは疑わしい活動を特定するために何らかの技術を私に投げてもらえますか? – Veeru

+0

あなたの目的は疑わしい活動を検出することです。たぶん、クライアントの活動を記録し、ある期間にアクセス時間を制限したり、クライアントに返されるレコードを制限したり、ロジックに応じてどのようなアクションが正常か異常かといったいくつかのルールを設定する必要があります。あなたはクライアント資格情報を尋ねていなくても、依然としてユーザーとしてIPをトレースできます。 – Feng

0
  1. クライアントアプリケーションからRSAKey世代を離れる。クライアントアプリケーションがダウンロードされているサイトとWCFサービスの両方で使用される1つのアセンブリに移動します。

  2. クライアントアプリケーションをダウンロードしようとしているときに、RSAKeyを提供してください。 {IPアドレス、生成されたRSAKey}のペアを、クライアントアプリケーションがダウンロードされているサイトとWCFサービスの共通のストアに保存します。

  3. クライアントのRSAKeyを設定する機能を提供します(したがって、RSAKeyは各WCFメッセージに添付されます)。

  4. WCFサービスが受信した各メッセージを調べて、RSAKeyが含まれているかどうか、およびキーが有効かどうか(共通ストア内の既存の{IPアドレス、生成されたRSAKey}ペアを検索)

1

短い答え:いいえ。

ここでの問題は、あなたのクライアントが接続できるようにする必要があるということです。あなたのクライアントのコピーを持っている人、それを行う時間/知識があれば誰でも、それがどのように動作しているのかを理解し、同じことを返す独自のクライアントを作ることができます。彼らは自由にして自由に何でもできます。

この種のDRMを大企業が達成しようとすると、多くのお金がかかり、いつも壊れています。このタイプのものが働く唯一の実際の方法は、不明瞭です(誰もそれを壊すことはありません)。

サービス自体は、認証を介して、または防止しようとしているものをブロックするために行われている通話の健全性チェックを試みることによって、誤って使用されることを防ぎます。あなたがしようとしていることは、あまり安全ではありません。

(このサービスは、とにかく、あなたはそれについてとても心配していることに何をしますか?)

+0

申し訳ありませんが、私はこのサービスについては公開できません。大部分の人/企業にはない膨大なデータの集まりです。 私の主な関心事は、このサービスを異なる検索パラメータで継続的に呼び出す人がいると、同じデータベースを構築する時間が経ちます。私の心配を得ることを願っています。 – Veeru

+0

はい、あります。しかし、あなたはこのような問題からそれを保護することはできません。誰かがリバースエンジニアリングしてクライアントを構築し、町に行くことができます。 – Tridus

1

あなたの主な関心事は、「過使い方」本当にあるように聞こえます。そうであれば、クライアント呼び出しでいくつかのタイプの制限を実装するのはどうでしょうか。あなたは可能性:

-Limitクライアントが指定した時間になります要求数結果の数は、単一のリクエストで返さ-Limit期間
はもちろん

、これらのオプションのどちらが上であなたを守ります長期。時間が与えられれば、どんなクライアントもあなたのサービスを通してDB全体をダウンロードすることができます。いくつかの制限を使うことで、少なくとも、ログを分析してクライアントのうちの1人が実際に悪意を持っているかどうかを判断するために時間を割いて購入することになります。要求をサービスに記録することで、特定のクライアントが何か悪いことをしているかどうかを判断するのはかなり容易です。

関連する問題