要約する:
- ベンダーからAPIキーが発行されているため、そのAPIを使用できます。また、このキーが他人に知られることを防ぐ義務があります。
- アプリケーションコードで、そのベンダーのAPI(APIキーが必要)を呼び出しています
- お客様がバイナリにアクセスできるシステムにアプリケーションを展開しているため、コードを逆コンパイル/難読化解除したり、トラフィックをインターセプトしたりする可能性があります。
このキーの侵害を防ぐ最善の方法は、キーを制御し続けることです。これは、あなた以外の誰かがバイナリを読むことができるサーバーに決してデプロイしてはならず、あなたがコントロールしていない通信リンクを決して越えないことを意味します。
最終的に、バイナリが制御できない場合、それらのすべてが制御できなくなります。同様に、誰かがトラフィックを傍受できる場合、APIキーをキャプチャできます(SSLを使用している場合でも)。
これを実現する主な方法は2つありますが、どちらもデプロイされたアプリケーションにプライベートAPIキーが含まれていません。
展開ごとに一意のAPIキーを取得する
これには、ベンダーとの追加の関係が必要になります。ベンダーでは、キーを取得するか、顧客にキーを取得させることができます。
これは、実際には、たとえばGoogle Maps APIを使用する製品では非常に一般的です。ソフトウェアの作成者は、コピーの開発/実行中に使用する独自のキーを持っていますが、ソフトウェアにそれを含めず、代わりに、ソフトウェアをインストールするユーザーとして、Googleにアクセスして独自のAPIを取得する必要がありますキー。ソフトウェアには、使用するGoogle Maps APIキーを設定するための設定オプションがあります。
実際、APIキーを発行する多くのベンダーは、この方法で契約を結んでいる必要があるため、とにかく間違った道を進んでいる可能性があり、ベンダーの利用規約に従って使用が許可されている唯一のソリューションである可能性があります/またはそれらとの法的契約。
プロキシを使用する
アプリケーションが(サーバー上で)APIを呼び出すプロキシAPIをセットアップし、次に、キーを使用してAPIがベンダーのAPIを呼び出します。
APIをさらに保護する必要がある場合があります。たとえば、アプリケーションのみがAPIを使用していることを確認するためのものです。これは次の方法で実行できます。
- 機能を非常に具体的にするだけですが、アプリで使用できます
- IPホワイトリスト
- サーバー用に既に持っている既存のライセンス/承認メカニズム
- 顧客にキーを発行できる独自のAPIキーシステム
ここで心に留めておくべきことは、これを行うことが許可されていない可能性があるということです。ベンダーには、「集約サービス」またはプロキシの構築を妨げる利用規約または法的契約がある場合があるため、確認する必要があります。
不正行為の処理
キーが侵害されなくても、顧客の1人がベンダーにキーをブロックさせるようなことをしている場合、突然すべての顧客が無効になり、唯一の修正方法は他の全員を更新することです。
同様に、もしあなたがあなたの顧客の1を(例えば、彼らは払って停止し、ソフトウェアなどを海賊版している)をブロックしたい、あなたは他の皆に更新を発行せずにそれを行う、し、キーを無効にすることはできません。
ほんの一握りのクライアントを超えたものに対するこれのロジスティクスは、すぐに受け入れられなくなります。
プロキシとして機能する場合でも、インストールごとに一意のキーを使用する場合でも、これらの状況を比較的簡単に処理できます(他の人にほとんど影響を与えずに)。
ソフトウェアに組み込まれているキーを保護しようとすることは、最終的には無駄な努力です。何をするにしても、バイナリ、ソース、および/または通信チャネルにアクセスでき、キーを取得するのに十分であると判断された攻撃者は誰でもアクセスできます。
だから、それを埋め込まないでください。「勝つ唯一の動きはプレーしないことです。」