web-dev-qa-db-ja.com

誰かが私のWebサービス用に独自のクライアントアプリを作成できないようにする方法はありますか?

RESTful Webサービスとそれとのやり取りに使用されるコマーシャルAndroidアプリがフロントエンドにあるとします。エンドポイントが表示されないようにSSLを使用できますが、誰かがそれを行うことができますそれらを見つけるためのリバースエンジニアリング。

SOAPを代わりに使用して、Webサービスへの呼び出しをもう少し複雑にすることもできますが、RESTfulベースのサービスよりも実際の利点があるかどうかはまだわかりません。

キーをクライアントアプリにハードコーディングして、クライアントアプリだけがサービスを使用できるようにすることを考えていました。また、コードの難読化が役立つ場合もあります。しかし、これは実際にどれほど役立ちますか?

更新:JOWが指摘したように Fiddler

httpsを復号化して完全なリクエストを表示するために使用できます。ただし、Androidアプリのみを使用する場合、これはAndroidクライアントアプリにサーバー証明書をハードコーディングすることで解決できます。また、SOAP WS-Securityですが、それを回避するために、fidlerと同じようにツールを機能させることができると思います。

31
Ana Mandic

これは不可能でしょう。 APIを使用するために必要なすべての手順をアプリに含めることが基本です。十分なスキルと時間があれば、これらの秘密を抽出して自分のクライアントを作成できます。

41
Justin Gerhardt

RESTまたはSOAPが使用されているかどうかに関係なく、Playのすべてのユーザーが既存のクライアントを使用できる限り、自分のクライアントを作成するのは非常に簡単で簡単です。ストア:Androidデバイス Fiddler を使用してデバイスからHTTPトラフィックをキャプチャし、キャプチャしたトラフィックに基づいて独自のクライアントを設計します。

HTTPSトラフィックであっても Fiddlerを使用して簡単に復号化できます です。 HTTPメソッド、URL、ヘッダー、Cookie、本文、およびキーがすべて表示されます。これは安全だとはまったく思いません。 (Fiddlerと同じことができるリバースプロキシは他にもあります。)

24
JOW

セキュリティの観点からは、いいえ、これを行う方法はありません。コードやプロトコルをどれほど難読化しても、APIにアクセスするためのコードと、APIへのアクセス時に生成されるネットワークトラフィックはユーザーの手に委ねられており、リバースエンジニアリングツールを使用できます。彼らはそれを望んでいます。

ビジネスの観点からは、誰かが代替クライアントを生み出した場合のコストを、それが起こらないようにするための対策を実装するための追加コストに対して評価する必要があります。たとえば、非常に難読化された独自のAPI(REST、SOAP、およびその他の標準化されたプロトコルを回避する)を完全に使用できますが、これは実装が難しくなるため、コストが高くなります。一方、リバースエンジニアリングを行うことはかなり困難になります。そのような手段(または他の適切な手段)がビジネスにとって価値がある場合は、解決する必要があります。

法的な観点から、多くの場所にはサードパーティのクライアントの作成または使用を禁止する利用規約があります。サーバーへのトラフィックを監視してサードパーティのクライアントを使用している可能性があるかどうかを判断するか、アプリストアでのサードパーティのクライアントの出現を監視することで、それを強制するのはあなた次第です。また、法的措置を講じるリソースがあるかどうか、およびそのような措置を講じる価値があるかどうかを判断するのは、あなた次第です。

ユーザー関係の観点からは、すべてのサードパーティクライアントを全面的に禁止するという考えを再検討する必要があるかもしれません。明らかに、開発者が自分の広告で恐ろしいクライアントを作成することを望んでいませんが、最近の多くのサービスにより、サードパーティの開発者がアプリケーションを登録してAPIキーを受け取ることができます。登録のプロセスは、単純な使用条件(「アプリに独自の広告を掲載しない」など)から、インターフェースの評価やソースの完全な検査まで、必要に応じて単純または複雑にすることができます。コード(もちろん、それが単純であるほど、開発意欲の高い開発者は登録することになります)。サードパーティの開発者がAPIを使用できるようにすることも、必ずしも悪いことではありません。サービスをデータソースとして使用するアプリを作成することもできますが、それとはまったく関係がありません。アプリに適切な認定を行った場合、またはビジネスが参入するつもりのない市場を満たすようにしたい場合、またはサービスのクライアントアプリについて本当に優れたアイデアを持っている場合、実際にはより多くのビジネスをもたらします。あなた自身のアプリを改善するために学ぶことができる何か。

17
Micheal Johnson

セキュリティの観点から、APIへの不正アクセスを不可能にすることはできませんが、最小限にすることはできます。これは実際にはセキュリティの問題ではありませんが、脅威モデルの概念はかなり適切です。APIへのアクセスを禁止したいのは誰か、どのような被害を回避したいですか?

多くの大規模なWebサイトでは、サービスへの代替アクセス手段を禁止しています。これは、通常、引き続き広告を配信できるためです。彼らは多くのレベルでの対策の組み合わせを通じてそうします:

  • リクエストヘッダーとユーザーエージェントをチェックする(これにより、多くのカジュアルな一般ユーザーが停止します)
  • 動的な状態、難読化、その他の手段(偶然のリバースエンジニアリングを停止するが、決定的なものではない)を追加することにより、APIを複雑にする
  • 利用規約で禁止すること(他の正当なビジネスや少数の良心的な個人を停止します)
  • 弁護士を通じてToSを実施する(これは非倫理的なビジネスには必要かもしれませんが、小規模の個人ユーザーに対して展開した場合、善よりも害が大きくなります。)

これらはどれも100%効果的ではありませんが、必ずしもそうである必要はありません。重要なことは、損失を削減することです。達成したいことを考え、それに応じて対策を選択してください。

4
alexis

RESTful Webサービスとそれとのやり取りに使用されるコマーシャルAndroidアプリがフロントエンドにあるとします。エンドポイントが表示されないようにSSLを使用できますが、誰かがそれを行うことができますそれらを見つけるためのリバースエンジニアリング。

SSLはターゲットIPアドレスを隠蔽しないため、リバースエンジニアリングを行う必要もありません。それ以外はFiddler + MITM証明書で取得できます。

SOAPを代わりに使用して、Webサービスへの呼び出しをもう少し複雑にすることもできますが、RESTfulベースのサービスよりも実際の利点があるかどうかはまだわかりません。

まあ、あなたがより多くの努力を注ぐほど、ハッカーはより多くの努力をする必要があると思います。

そうは言っても、ハッカーはあなたよりはるかに多くの自由時間を持っています、そしてそれらはたくさんあり、彼らのうちの1人だけがソリューションを掲示板に投稿する必要があり、それはゲームオーバーです。

したがって、おそらく努力する価値はありません。

キーをクライアントアプリにハードコーディングして、クライアントアプリだけがサービスを使用できるようにすることを考えていました。また、コードの難読化が役立つ場合もあります。しかし、これは実際にどれほど役立ちますか?

ハッカーはすぐに 解読ツール を手元に持っているので、以前ほどは役に立ちません。

おそらく努力する価値はありません。

Fiddlerを使用してhttpsを復号化し、完全なリクエストを確認できます。ただし、Androidアプリのみを使用する場合、これはAndroidクライアントアプリにサーバー証明書をハードコーディングすることで解決できます。また、SOAP WS-Securityですが、それを回避するために、fidlerと同じようにツールを機能させることができると思います。

ハッカーは、あなたがそれを構築するよりもはるかに速くリバースエンジニアリングすることができます。

したがって、おそらく努力する価値はありません。

クライアント上で実行されるコードをハッカーがリバースエンジニアリングするのを阻止することはできません。したがって、どのような保護手段を講じても、ハッカーはそれらを真似ることができます。

丁度。これに時間を費やさないでください。

代わりに、機密性の高い機能がサーバーで実行されるようにアプリケーションを設計してみてください。ここでは、保護できます

残りの時間を費やしてアプリの機能を改善し、顧客が他に何も欲しくないようにします。

0
John Wu