web-dev-qa-db-ja.com

サーバー側からクライアント側のアプリケーションIDを確認することはできますか?

公開されているが特定のクライアントアプリケーションに応答するだけのWebサービスがあるとします。許可されていないアプリケーションによるサービスへのアクセスを防ぐために、クライアント側のアプリケーションIDをチェックするメカニズムはありますか?

たとえば、iOSアプリケーションから呼び出されるWebサービスがあります。他の人が私のWebサービスを呼び出せないようにしたい。

他の人が私のクライアントアプリケーションを逆コンパイルして、私のアプリケーションと同じように機能する別のアプリケーションを作成できるという事実に関して、サービスへの不要なアクセスを回避する唯一の方法は、リクエストが自分のアプリケーションからのものであることを確認するためにサーバーのアプリケーションIDを確認することです。

それを行うための堅牢で安全な方法はありますか?

4
anonim

いいえ、あなたが言ったように、誰でもあなた自身のクライアントアプリケーションを逆コンパイルして模倣することができます。クライアントのユーザーを信頼しない場合は、クライアントからの入力をnever信頼できます。

あなたはcan新しいクライアントの作成をより困難にするために、追加の保護手段を追加します。たとえば、クライアントが常に特定の最大頻度のサービスを使用している場合、接続し、それよりもはるかに速く要求を発行するクライアントは、ハッキングされたクライアントである可能性があります。

1
Chris Pitman

セキュリティはクライアントからではなく、Webサービスの実装方法にあります。自分のクライアントからのトランザクションのみを受け入れるようにしても、セキュリティは向上しません。

安全なWebサービス操作には、サービスがクライアントから独立して動作すること、およびサービスまたはそのサービスの他のユーザーに害を及ぼす可能性のあるサービスAPIがないことが必要です。

認証、セッション追跡、SSLは、Webサービスのセキュリティを向上させることができる技術です。接続されたクライアントの起源を確認することについて心配する前に、最初にそれらの努力に焦点を当てます。 Webサービスが安全である場合、クライアントのソースコードにアクセスする人にメリットはありません。

Webサービスをブラックボックスと考えてください。クライアントは接続し、要求とトランザクションを発行できますが、クライアントがブラックボックス内で何が行われているのかを知ることはありません。

5
Reactgular

前回セキュリティを実装したときは Apache Shiro を使用しました。これは、ユーザーデータへのセキュリティ保護されたクライアント/サーバーアクセスを実装する、確実で安全な方法を提供しました。ハッシュおよび暗号化アルゴリズムを提供して、クリアテキストのパスワードが利用できないことを保証するだけでなく、セキュリティシステムを使用するためのフレームワークも提供しました。各コンポーネントは、現在のユーザーの認証レベルを確認し、さまざまなコンポーネントのユーザーへの配信を許可または禁止できます。

ローカルユーザーアカウント、Facebookアカウント、Twitter、Linkedin、Plaxo、およびgoogle +を許可するGWTアプリケーションと統合しました。すべてのケースを問題なく処理しました。

ShiroがWebアプリケーションと統合すると、サーバー側のセッションを使用して現在のユーザーの識別子を保存します。これは、クライアントが有効な認証を正常に提供した場合にのみサーバー側変数に割り当てられます。また、構成可能なタイムアウトを実装して、その認証の有効期間を制限します。

保護できないのは、中間者攻撃ですが、そのような攻撃から身を守るのはあなたの立場ではありません。 SSLの使用を強制すると、お尻がカバーされます。

チェックアウト このトップ10のセキュリティリスクのリスト を参考にしてください。

それがあなた自身のクライアントアプリケーションにどのように適用されるかに関しては、あなたは本質的に安全ではありません。通常、アプリケーション内に一意のコードを配置して、そのアプリケーションのみがWebサービスと通信できるようにします。 1人がクライアントをダウンロードすると、そのコードを簡単に利用できます。すべてのパケットスニファは、通信を見ることができます。 SSLを使用すると、さらに困難になりますが、逆コンパイルによってテキストが提供されます。

Webサービスを介して認証するユーザーへのアクセスを制限する場合は、より良い一歩です。

0
Kieveli