Google マップはどのようにして API キーを保護しますか?似たものを作るにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/2256305

質問

現在 Google では、地図の提供元のドメインに固有の API キーを作成することを求めています。Google はこれをどのように強制しますか?私も同じことをしたいです。

自分のサービスの API を公開していますが、クライアントがサーバーからだけでなく JavaScript 経由で API への呼び出しを埋め込めるようにしたいと考えています。ランダムなトークンだけでセキュリティを保護することはできましたが、もちろん、クライアント マシン上のコードを見れば誰でも簡単に偽装できる可能性があります。

私はこの概念が不可能であることを常に理解していましたが、どういうわけか Google はそれを強制することにうまく取り組んでいます。

編集 - 結局のところ、Google は実際には何も驚くべきことをしていないように思えます。これらの API はおそらく追跡のみを目的としており、実際にはその API がキーを持っている人によって使用されることを保証するものではありません。

役に立ちましたか?

解決

私は、彼らは、コールがどこから来ているかを決定するためにREFERERのURLを使用し、かなり確信しています。ドメインがキーに割り当てられているものと一致しない場合、それは無効な要求です。

実用例えば、PHPを使用して、あなたはリファラをチェックする$_SERVER['HTTP_REFERER']を使用してドメインを確認することができます。ドメインが一致した場合、有効な応答を返します。そうでない場合は、401権限または他の応答を返すことができます。

他のヒント

APIキー自体は、おそらくキーが関連付けられているドメインのみのGoogle APIサーバーが知っている秘密の一方向ハッシュです。それは(もちろんGoogleに)よく知られているいくつかの他の部分の情報が含まれていてもよいです。あなたがそのドメインからの要求を行うと、APIサーバは、要求がから来ていると、同じ一方向ハッシュ計算を行い、2つの値を比較したドメインを取ります。

Ajaxのコールの場合、彼らはおそらく、ドキュメントのホストのドメインを取得するためにリファラを使用しています。参照元が詐称することができますが、最終的にはAPIを使用するためには、ドキュメントで実行するために、GoogleのJavaScriptを取得する必要があります。この時点で、このJavaScriptは確かにAjaxのAPIコールを呼び出した文書は、ターゲットサーバから発信することを確認することができます。これは、あなた自身のDOM実装を持っているか、スクリプトの実行中の変更に設けられており、また、当然の偽造される可能性があり。しかし、このなりすましは、クライアント側で発生する必要があると、GoogleのAPIを使用したいウェブサイトは、クライアントソフトウェアを偽造することができること可能性は非常に小さいます。

APIは基本的に自由であるため、彼らは同様に彼らのAPIへの匿名アクセスを提供していたかもしれないことに注意してください。どうやら、Googleの意図は、それへの不正アクセスを保護することはありませんが、彼らはそのデータの使用状況に関するできるだけ多くのデータを収集し、それらがターゲットドメインについて収集した他のデータとその使用状況を関連付けることができることができていることを確認します。そのため、私は上記のものよりもはるかに複雑であることをAPIキーの検証を期待していない - より高度なアプローチのROIが低すぎる。

そして、もちろん彼らのAPIを介して可能なXSS攻撃の懸念もあります。しかし、私は彼らのAPIキーは、彼らが持っている任意の抗XSSコードにあまり結びついているとは思わない。

私のコメントが言うように:

  

REFERERは偽造される可能性があり、おそらく、Googleが検証の手段としてそれを使用することはほとんどありません。 このwikipediaのエントリ。

を参照してください。

私の推測では、Googleは、おそらくDNSルックアップと一緒に、発信者のIPアドレスを使用していることです。あなたのDNSエントリは、ウェブサイトもあなたを取得するために正しいことを持っているようにDNSは、実際に偽装可能ではありません。

しかし、サーバーがラウンドロビンIPアドレスのDNS設定を使用している場合ので、でもそれは、その問題を抱えている、DNSルックアップを行うときに、Googleは異なるIPアドレスにリダイレクトされます。

FAQから

  

http://www.mygooglemapssite.com/ のための鍵はときにのみ受け入れられることに注意してくださいサイトがこのアドレスを使用してアクセスされます。サイトはIPアドレスでアクセスされた場合は受理されません(例えば。 http://10.1.2.3/する)またはDNS CNAMEレコードを使用してwww.mygooglemapssite.comにエイリアスされるホスト名でます。

私の推測では、のように正常に動作思われる、ページを要求するときに送信されるHostヘッダーを使用している可能性があることであるGoogleが直接ページにそれのAPIスクリプトを含めることが求められます。そして、そのスクリプトは、現在のページのヘッダーへのアクセスを持っていると確認するためにそれを使用することができます。

私の推測では、それはそれはDNSのチェックを行っていないことを意味しており、IPアドレスまたはエイリアスのために動作しないという事実にバックアップされます。

この方法は、ページにアクセスするための正しいヘッダでなければならないように、偽装することができません。しかし、これは、ドメインへのエイリアスが動作しないことを意味します。

しかし、これはまた、あなたがこのサーバー側を確認することができないとして、私は信じて、コードにアクセスするためのJavaScriptライブラリを提供しなければならないことを意味します。

すべての点に同意します フランシ・ペノフが挙げたものです。 他人の API キーの使用について少し詳しく説明したいと思います。あなたが登録したと仮定しましょう key1example.com.

  1. 最初の試み - 場合 anothersite.com もっている <script src="http://www.google.com/jsapi?key=key1">, Googleはリファラー(前述のハッシュスキーム)をチェックできますが、この場合は不一致があります。リファラーはなりすましの可能性があると多くの人が言及しているため、邪悪な攻撃者はどのようにしてこれを克服するのでしょうか?これは実際には当てはまりません。確かにリクエストをすれば任意のヘッダーを送信することはできますが、邪悪なハッカーのなりすましリファラーはどのようにしてユーザーを偽装するのでしょうか。 anothersite.com?これは一般に簡単なことではありません。IE 6 には、攻撃者がクロスドメインリクエストを行う際に任意のヘッダーを設定できる古いバージョンのフラッシュがありましたが、一般にこれはスクリプトでは機能しません src. 。付属の Javascript が何らかの検証を行うかどうかはわかりません。 document.location これを防ぐためです(おそらくそうではありません)。

  2. 2 回目の試行 – 悪意のある攻撃者が API キーの Google JavaScript をコピーします。 mysite.comのページソースに変更されたJavaScriptを埋め込みます anothersite.com. 。現在、Google は何もチェックできません (リモート IP はユーザーのコンピュータになり、ユーザーや Google ができることはあまりありません)。

したがって、何らかの理由で API キーを秘密にしておきたい場合 (理由の 1 つは、悪意のある人がキーをブラックリストに登録/ブロックする可能性があるため)、サーバー経由でクライアントおよびプロキシ リクエストにキーを埋め込まないでください (アプリケーション コードには、鍵)。

それが動作する理由は、あなたがJavaScriptでAPI呼び出しを行うことができないということです。ブラウザのセキュリティはJavascriptが由来のドメインを除いてどこでも要求を行うからJavaScriptを防ぐことができます。このため、JavaScriptから任意のAPI呼び出しは、(APIキーはJavaScriptに見られることはありません)APIキーが格納されている、あなたのサーバーを介してバウンスする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top