28

これはおそらく一般的なセキュリティの質問ですが、私が開発しているものの領域で質問すると思いました.

シナリオは次のとおりです。API キーを使用して検証し、ユーザーが誰であるかを通知する Web サービス (WCF Web Api) と、フロント エンドでの jQuery とアプリケーションの組み合わせ。

一方では、トラフィックは https である可能性があるため検査できませんが、ユーザーごとに同じキー (GUID など) を使用し、両方で使用している場合、それが取得され、誰かがなりすます可能性があります。ユーザー。

OAuth に似たものを実装すると、ユーザーとアプリごとのキーが生成され、それが機能する可能性がありますが、それでも jQuery 側では、javascript でアプリ API キーが必要になります。

これは、誰かが実際のコンピューターにいて、ソースを表示した場合にのみ問題になります。

私は何をすべきか?

  1. md5 または何らかの方法でキーを暗号化しますか?
  2. キーをセッション変数に入れてから、ajaxを使用するときにそれを取得しますか?
  3. それを乗り越えてください、それはそれほど大きな問題/問題ではありません.

おそらくよくある問題だと思いますので、どんな指摘も歓迎します。

これを明確にするために-これは私が書いたAPIであり、Googleなどではなく、クエリを実行しています。したがって、セッショントークンごとに実行できます。クライアント側を保護するための最良の方法を見つけようとしています私が使用するトークン/キー。

ここでは少し慎重になりすぎていますが、これを使って学習しています。

4

5 に答える 5

18

(この投稿に「セキュリティ」のタグを付けることをお勧めします。)

まず、何から保護しているのかを明確にする必要があります。クライアントを信頼できますか?巧妙なユーザーは、Greasemonkeyスクリプトをページに貼り付けて、UIがリクエストを送信するために呼び出すコードを正確に呼び出すことができます。Javascriptクロージャですべてを非表示にすることは、デバッガーが必要であることを意味するだけです。攻撃を不可能にすることはありません。FirebugはHTTPS要求を追跡できます。侵害されたクライアントも検討してください。キーロガーがインストールされていますか?攻撃者がいつでも暇なときにメモリの任意の部分を検査できるように、システム全体が密かに仮想化されていますか?Webアプリのように公開されている場合のセキュリティは非常に注意が必要です。

それでも、考慮すべきことがいくつかあります。

  1. 実際にキーを使用するのではなく、認証直後に与えるトークンなどのHMACハッシュを使用することを検討してください。

  2. DOMストレージは、Cookieよりも少し難しい場合があります。

  3. セキュリティモデルの例については、 GoogleによるOAuth2の実装をご覧ください。基本的に、限られた時間だけ(そしておそらく単一のIPアドレスに対して)有効なトークンを使用します。そうすれば、トークンが傍受または複製された場合でも、それは短期間しか有効ではありません。もちろん、トークンがなくなったときに何をするかについて注意する必要があります。攻撃者はあなたのコードと同じことをして、新しい有効なトークンを取得することができますか?

サーバー側のセキュリティを無視しないでください。クライアントがリクエストを送信する前にチェックする必要があったとしても、ユーザーが実際に要求していることを実行する権限を持っているかどうかをサーバーでもう一度チェックしてください。実際、このアドバイスは上記のほとんどを取り除くかもしれません。

于 2011-06-14T01:07:34.520 に答える
2

通常、このような場合、「AJAX」を使用してサーバーを介してリクエストをプロキシしますが、リクエストを行うブラウザが許可されていることを確認します。JavaScript からサービスを直接呼び出す場合は、 JSON Web トークン (JWT)などの何らかのトークン システムが必要です。また、サービスが現在のドメイン以外の場所にある場合は、クロスドメインの問題を解決する必要があります。

于 2011-06-13T23:00:16.483 に答える
2

jQuery を使用して、API との通信を処理するサーバー サイド コードを呼び出してみませんか。MVC を使用している場合は、コードと API キーを含むコントローラー アクションを呼び出して、サービスをヒットし、部分的なビュー (または JSON) を UX に返すことができます。Web フォームを使用している場合は、コード ビハインドで API 通信を行う aspx ページを作成し、UX が使用する応答ストリームにコンテンツを書き込むことができます。次に、UX コードにサーバー側コードへの $.post() または $.load() 呼び出しをいくつか含めるだけで、API キーとエンドポイントの両方が保護されます。

于 2011-06-13T23:01:03.200 に答える
0

詳細については、 http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspxを参照してください情報 (.NET 4 で REST サービスの API キー検証を行う方法)

于 2011-06-10T05:32:40.867 に答える