Web APIを保護するためのベストプラクティスは何ですか?


15

モバイルアプリがサーバーとデータベース(ASP.Net MVC 4にありますが、それはほとんど関係ありません)とやり取りするために、WebサービスAPIを構築する必要があります。ほとんどのアクションではユーザーをサービスに登録する必要はありませんが、アプリのユーザーのみにアクセスを制限したいと思います。

他の場所(たとえば、すべてのデータを必要としている人や非公式アプリを作成している人)からの呼び出しを拒否するための方法は何ですか?

私の最初のアイデアは、デバイスがサーバーにトークンを要求することです。トークンはランダムに生成され、そのまま送信されます。他のすべてのメソッドは、ソルトされたトークンのmd5ハッシュになる特定のヘッダーがリクエストヘッダーに含まれていることを確認します。サーバーはトークンとソルトを認識しており、ハッシュを計算して送信されたものと比較できます。さらに、トークンは限られた寿命であり、デバイスは1時間おきに別のトークンを取得する必要があります。

これは実装が非常に簡単で、おそらく100%の証拠ではありませんが、良いアイデアのようです。どう思いますか?

回答:


15

アプリケーションをリリースするとすぐに、リバースエンジニアリングされる場合があります。つまり、同じアプリケーション(同じバイナリ、同じ設定)がすべてのユーザーに配布されている場合、100%保護するためにできることはありません。

すべてのユーザーに対してアプリケーションをカスタマイズできる場合、他のアプリケーションがAPIを使用することを禁止しない可能性がありますが、少なくともAPIに対して実行できるリクエストの数によってこのアプリケーションを制限します。

次のスキーマを想像してください。

  1. クライアントは、一意の識別子(ユーザーごとに1つの識別子)を接続して送信します。
  2. サーバーは、公開鍵で暗号化されたチャレンジを送信して応答します。この公開鍵は、以前に送信された一意の識別子に関連付けられています。
  3. クライアントは、秘密鍵を使用してデータを復号化することで課題を解決し、復号化されたシークレットをそのままサーバーに送り返します。
  4. サーバーは、送信されたシークレットが最初に生成されたシークレットに対応することを確認します。

アプリケーションをハッキングし、秘密鍵を正常に取得する開発者は、自分のアプリケーションからAPIを使用できますが、サーバーの識別子としての識別子になります。

同じユーザーがAPIに1日あたり10,000回のリクエストを行うことができ、平均でアクティブなユーザーが1日あたり2000回のリクエストを行う場合、この開発者は自分のアプリケーションを自分で使用し、友人に渡すことができることを意味しますが、たとえば、朝に数分しか機能しないという理由だけで、彼は何千人にも販売することはできません。

これは役立ちますが、100%の証拠でもありません。ハッカーが自分のアプリがデバイスにインストールされているときに、アプリから秘密キーを抽出する方法を見つけた場合はどうなりますか?


あなたの質問には答えませんが、それでも役に立つかもしれないサイドノート:APIを主要製品(モバイルアプリケーション)のツールとして考えないでください有料の製品であるファーストクラスの製品そのものと考えてください。同じモデルがAmazonとGoogleで長年使用されており、MicrosoftがAzureなどで積極的に使用し始めています。

APIを光沢のある新しいモバイルアプリの奴隷になった二次ツールとしてではなく、実際の製品は、ユーザーが実際に見るアプリケーションと同じレベルであると考えるとすぐに、APIを保護する方法についてあまり考えなくなります他のアプリによる使用、およびAPI自体の収益化に関する詳細。このようなAPIは、顧客であるアプリや、誰でも自由に開発できる他のアプリで使用できます。これにはいくつかの利点があります。

  • それだけで使用されるように、APIを作るあなたのアプリケーションは、困難かつ高価です。この時間とお金は、より有用なものに使用できます。

  • APIを公開することは、あなたと世界の両方に大きな利益をもたらすことができます。あなたが優れたアーキテクトであり、優れた開発者であると想像してください。驚くほど素晴らしいAPIを作成しましたが、ビジュアルデザイナーのスキルは下手であり、インタラクションデザインなどについてはまったく理解していません。人々が知っていることは、あなたが使えなくていモバイルアプリケーションを作成したということです。APIが公開されている場合、他の開発者はその品質に惹かれ、そのための優れたアプリケーションを作成し、多くのお金をもたらします。

  • 他の人があなたのAPIをどのように使用するか想像することはできません。これがKinectで起こったことです。もともと、Microsoftはゲーム用にKinectを作成しました。MicrosoftがAPIを公開したとき、数年後に科学アプリケーションや医療分野などで使用されるとは想像もしていませんでした。WebAPIでも同様です。より多くの開発者がそれを使用し、より広範なアイデアが使用されます。


非常に興味深い答えです。おそらく、APIを公開する方法を考える必要があります。また、参考までに、リバースエンジニアリングと逆アセンブルが違法であるフランスのターゲット市場です。
アントワーヌ

2
@アントワーヌ:リビアエンジニアリングは、ライセンスが禁止するとすぐに、どの国でも違法になるでしょう。しかし、それが違法であるという事実は、誰もあなたのアプリをエンジニアに敬意を払わないという意味ではありません。
アルセニMourzenko
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.