2009-03-07 20 views
6

jQueryとJSONを使用してASP.NET .asmx Webサービスを使用して厳しい操作を実行するアプリケーションを構築しました。アプリケーションと.asmxは同じドメインにあります。私はリモートで.asmxの読み込み操作を消費する人は気にしませんが、人は無作為に物を削除したくありません!asp.net .asmx Webサービスへのクロスドメインコールのブロック

私は公にアクセスしたいと思う方法と「隠したい」方法を2つのWebサービスに分けることができます。 「hidden'.asmx Webサービスへの呼び出しを、そのホストされているのと同じドメインにロックするにはどうすればよいですか?

ありがとうございます。

編集: 誰かがこの上でコメントすることができ、もっともらしい(ソース:http://www.slideshare.net/simon/web-security-horror-stories-presentation):そうです AjaxはHTTPヘッダーを設定することができ、通常のフォームが傾きます。 Ajaxリクエストは同じドメインのものである必要があります。

"x-requested-with" "XMLHttpRequest"リクエストは同じドメインからのものでなければなりません。

+0

あなたはそのプレゼンテーションについて特定の質問がありますか?すべてがサイトを侵害するのに間違いなく使用されますが、基本的な保護があれば安全です。 –

+0

はいそれはあなたがx-requested-withに依存して同じドメインから安全であることを伝えることができる部分です。今日のほかの場所で同じ質問が出され、すべてのhttpヘッダーが偽装されていると確信しています。私はちょっと確信が持てません。とにかく、iveはこれを別の方法(主なリファクタリング) – jdee

+0

で解決しましたが、おかげさまで大変感謝しています。それは私の実際の世界の問題を解決するために正しい軌道に乗っていることは間違いありません。 – jdee

答えて

8

あなたはWebサービスで固定する必要がある2つのシナリオがあります。

  1. は、認証されたユーザですか?
  2. 私のページからのアクションですか?

認証認証は、フォーム認証を使用している場合はすでに処理されています。あなたのWebサービスがサイトのフォーム認証で保護された領域にある場合、ログインしていない限り誰もあなたのWebサービスにアクセスすることができません。

2番目のシナリオはややトリッキーな話です。この攻撃は、CSRFまたはXSRF(Cross Site Request Forgery)として知られています。つまり、悪意のあるWebサイトは、ユーザーがサイトにログインしている間に、ユーザーの代わりに操作を実行します。 Here's a great writeup on XSRF

ジェフアトウッドは、一種の上記のリンクでそれをすべて合計するが、ここでは4つのステップでXSRF保護である:

  1. は、ユーザーのCookieにGUIDを書きます。
  2. AJAXコールの前に、この値をCookieから読み取って、 をWebサービスPOSTに追加します。
  3. サーバー側で、FORM値とCookie値を比較します。
  4. サイトは別のドメインのCookieを読み取ることができないため、安全です。
-1

AJAXではブラウザが呼び出しを行うため、ドメインが同じであることを確認しても、簡単に偽造することができるため、十分安全です。

物事を安全に保つために、ある種の自動化/認証トークン(タイムアウト付きであることが望ましい)を使用する必要があります。

+0

あなたは精緻化できますか?私はあなたが言いたいトークンシステムはどうですか? – jdee

+0

>「あなたが言いたいトークンシステムをどのように作成できますか?ありがとう – jdee

+0

ユーザーが厳しい操作を要求したときにajaxが返すキーを発行する必要があります。このキーは、サーバーから生成されたページだけがキーを持ち、操作を実行できる短い時間の後に期限が切れるはずです – Sruly

-1

IISを使用してドメインのIPアドレスのみにアクセスできるようにするには、IPアドレス制限を使用するのがクイックで汚れたソリューションです。

おそらくHTTP認証を使用するほうがよいでしょう。これを行うには多くの方法がありますが、私はAuthentication in ASP.NET Web Servicesが役に立ちました。

関連する問題