2011-12-29 9 views
1

私はFacebookのアプリケーションを持っていますが、一部の機能ではajax経由でいくつかのスクリプトを実行する必要があります。スクリプトが私のアプリ内からのみ呼び出されるようにする方法はありますか?私はこのようなajax呼び出しのためにjqueryを使います:ajaxコールの発信元を制限する


script.php内のコードはいくつかのSQLクエリを実行し、要求されたすべての変数がajax呼び出しを通過することを確認します。
明示的な呼び出しではなく、アプリケーションから呼び出された場合にのみスクリプトを実行できるようにするにはどうすればよいですか?

ありがとうございます。

答えて

3

あなたのアプリからAjaxリクエストが呼び出されていることを100%確実に確認できる方法はほとんどありません。それがミッションクリティカル(高セキュリティ)要件だった場合、私は、特定のWebリソースを確保するのと同じ方法でそれを確保します:

  1. SSLを使用
  2. セッションを確立するために、ログインゲートウェイを要求
  3. セッションを確立するの面倒を通過する必要はありません場合は、要求が

を処理することを可能にする前に、そのセッションの有効性を確認し、そこにあまり確かであるが、予防まだ非常に有用な手段アクセス(因果的アクセス、つまり):

2つのリクエストヘッダー(ReferrerとX-Requested-With)が存在するかどうかを確認します。 ReferrerにはベースページのURLが含まれ、X-Requested-WithにはXMLHttpRequestが含まれている必要があります。これらは偽装される可能性がありますが、単純に直接URLを参照する人よりはるかに決定的な "攻撃者"が必要になります。

+1

もっと安全な最初の提案(セッションの確立)を行ったとしても、依然として安全性の低い要求ヘッダーのチェック方法を使用することができます。 –

0

回転する公開鍵/秘密鍵は、識別を確実にし、おそらく秘密鍵を使用してデータストリームを暗号化するのに役立ちます。

より安全なアプリケーションの中には、特定のIPアドレスに公開鍵を割り当てるものがあります。そのIPが要求ストリームにそのキーを提供しない場合、私はそれを違法な要求として扱い、無視します。

さらにステップを進めるには、そのパスのサーバーレベルでその特定のIP /ホスト名に要求をロックダウンすることができます。

あなたのウェブサービスをどのように安全に使用できるようにするかは、実際には本当に下にあります。

0

相互認証されたSSLを使用して、サーバーがアプリケーションからの着信接続のみを受け付け、アプリケーションがサーバーとの通信のみを行うようにします。

ここには、高度なアプローチがあります。自己署名入りのサーバーSSL証明書を作成し、Webサーバーに展開します。次に、自己署名付きのクライアントを作成し、アプリケーション内のカスタムキーストアにリソースとしてデプロイします。クライアント側のSSL認証を要求し、生成したクライアント証明書のみを受け入れるようにサーバーを構成します。そのクライアント側の証明書を使用して自分自身を識別し、その部分のサーバーにインストールしたサーバー側の証明書を1つだけ受け入れるようにクライアントを構成します。

アプリ以外の誰かがあなたのサーバーに接続しようとすると、サーバーはあなたのアプリに含まれているクライアント証明書を提示しない受信SSL接続を拒否するため、SSL接続は作成されません。

これは、アプリがクライアント側の証明書と関連する秘密鍵をどれだけ保護できるかによって異なります。

+0

WebアプリやAndriodアプリでこれを作成することについて話していますか? –

+0

本当に関係ありません。アプローチは同じです。 – jeffsix

+0

あなたが記述したとおりに使用されるSSL証明書を生成してクライアントに返すことができるWebアプリケーションを見ることにはかなり興味があります。そんなことは聞いたことがない。 –

1

私はあなたのページの文脈の外ですべての呼び出しを完全に排除できるとは思わない。それは、ネットワーク盗聴やを偽造できるようあなたが要求の内容をそれをベースにすることはできません任意のマシン

  • から呼び出し可能である場合は、要求のソースをそれをベースにすることはできません

    特定のマシン/ IPに限定することができれば、それを行うだけです。ホワイトリストに載っているマシンのリストをサーバー側に保管し、それらのマシンから要求が来ていることを確認してください。

    これ以外にできることは、認証が必要な場合です。この場合、アカウントごとにリクエスト量を抑えることができます。

  • 関連する問題