11

「プライベート」RESTAPIを備えたアプリケーションがあります。自分のWebページからAjax呼び出しを行うときは、RESTfulURLを使用します。ただし、これは安全ではなく、URLパターンを知っていれば、誰でも同じ呼び出しを行うことができます。

これらの通話を保護するための最良の(または標準的な)方法は何ですか?将来APIをリリースする予定がある場合は、今すぐOAuthのようなものを検討する価値がありますか、それとも2つの別々の戦略を組み合わせていますか?

PythonとTippy用のGoogleAppEngineを使用しています。

4

3 に答える 3

6

間違いなくOAuthを見てください

これはすぐにRESTAPIを保護するための「デファクト」スタンダードになりつつあり、GoogleTwitterFacebookなど、多くの大企業がこれを使用しています。

GAE上のPythonの場合、2つのオプションがあります。

最も簡単な方法(IMHO)は、BitBucketで利用可能なDjangoのOAuthサポートにDavidLarletのライブラリを使用することです。

ただし、Djangoを使用していないため、 GitHubで利用できるpython-oauth2ライブラリを確認することをお勧めします。このライブラリは、Python2.4以降のOAuthの最新の単体テスト済み実装と見なされています。

いずれにせよ、独自のサービスセキュリティソリューションを導入するよりも、OAuthを使用する方がはるかに優れていると思います。

于 2011-05-23T01:30:10.540 に答える
4

javascriptクライアントを保護することはほぼ不可能です。サーバーでは、Webブラウザを使用している人間と巧妙に作成されたスクリプトを区別するための絶対確実な方法はありません。

SSLはネットワークを介してデータを暗号化しますが、エッジで復号化するため、役に立ちません。中間者攻撃を防ぎますが、元のクライアントの正当性を検証することはできません。

OAuthは、2つのサーバー間のリクエストを保護するのに適していますが、Javascriptクライアントの場合、実際には役に立ちません。javascriptコードを読んでいる人は誰でも、コンシューマキー/シークレットを見つけて、署名されたリクエストを偽造できます。

APIスクレイピングを軽減するためにできること:

  • 誰かがあなたのウェブサイトにアクセスしたときに、短期間のセッションCookieを生成します。REST APIを呼び出すには、有効なセッションCookieが必要です。
  • 短期間のリクエストトークンを生成し、それらをWebサイトのHTMLに含めます。各APIリクエスト内に有効なリクエストトークンが必要です。
  • ウェブサイトのユーザーにログインを要求する(Googleアカウント/ OpenID); APIリクエストを処理する前に認証Cookieを確認してください。
  • レート制限APIリクエスト。短期間に1つのクライアントからのリクエストが多すぎる場合は、それらをブロックします。
于 2011-05-23T14:04:04.920 に答える
1

OAuthは、サードパーティのサービスがユーザーの動作に応じてリソースにアクセスすることを許可するように設計されているという点で、現在のシナリオではやり過ぎになります(安全でない可能性があります)。

許可されたユーザーを介したAJAXリクエストの保護

AFAICT、あなたはクライアント、リソース、認証を管理しています。したがって、URLへのアクセスと、場合によってはSSLを介したクライアントとサーバー間の通信のみを保護する必要があります[2]。

したがって、Tippyの認証拡張機能を使用してURLを保護します。

from tipfy import RequestHandler, Response
from tipfy.ext.auth import AppEngineAuthMixin, user_required

class MyHandler(RequestHandler, AppEngineAuthMixin):
    @user_required
    def get(self, **kwargs):
        return Response('Only logged in users can see this page.')

許可されたユーザーなしでAJAXリクエストを保護する

ユーザーが不明な場合は、CSRF防止策を適用して、「許可されていない」クライアントからの呼び出しからRESTサービスを保護することができます。TipfyにはWTForms拡張機能が組み込まれていますが、AJAXではありません。代わりに、セッション拡張機能を使用して、サーバーで検証する必要のあるすべての呼び出しに「authenticity_token」を適用できます。

于 2011-05-23T00:50:52.540 に答える