asp.net .asmx Webサービスへのクロスドメイン呼び出しをブロックする
質問
jQueryとJSONを使用してASP.NET .asmx Webサービスを消費するアプリケーションを作成し、crud操作を実行しました。アプリケーションと.asmxは同じドメインにあります。 .asmxの読み取り操作をリモートで使用する人は気にしませんが、ランダムに削除する人はいません!!!
私は、パブリックにアクセスしたいメソッドと「隠された」メソッドを2つのWebサービスに分割できます。 「hidden」.asmx Webサービスへの呼び出しを、ホストされているドメインと同じドメインにロックするにはどうすればよいですか?
事前に感謝します。
編集: 誰かがこれについてコメントできますか?(ソース: http:// www .slideshare.net / simon / web-security-horror-stories-presentation ): AjaxはHttpヘッダーを設定できますが、通常の形式ではできません。 Ajaxリクエストは同じドメインからのものでなければなりません。
だから" x-requested-with" " XMLHttpRequest"要求は同じドメインからのものでなければなりません。
解決
Webサービスで保護する必要がある2つのシナリオがあります:
- ユーザーは認証されていますか?
- アクションは私のページから来ていますか?
フォーム認証を使用している場合、認証部分はすでに処理されています。 Webサービスがサイトのフォーム認証で保護された領域にある場合、ログインしていない限り誰もWebサービスにアクセスできません。
2番目のシナリオは、少し複雑な話です。攻撃はCSRFまたはXSRF(クロスサイトリクエストフォージェリ)として知られています。つまり、悪意のあるWebサイトは、ユーザーがまだサイトにログインしている間にユーザーの代わりにアクションを実行します。 XSRFに関する優れた記事。
Jeff Atwoodは上記のリンクですべてを要約していますが、ここでは4つのステップでXSRFを保護しています:
- ユーザーのCookieにGUIDを書き込みます。
- AJAX呼び出しの前に、Cookieからこの値を読み取り、追加します WebサービスのPOSTへ。
- サーバー側で、FORM値とCookie値を比較します。
- サイトは別のドメインからのCookieを読み取ることができないため、安全です。
他のヒント
AJAXでは、ブラウザが呼び出しを行うため、ドメインが同じであることを確認したとしても、簡単に偽装できるため十分に安全ではありません。
物事を安全に保つために、何らかの認証/認証トークンを使用する必要があります(タイムアウトが必要です)。
手っ取り早い解決策は、IPアドレス制限を使用して、IISを介したドメインのIPアドレスアクセスのみを許可することです。
おそらくHTTP認証を使用した方が良いでしょう。これを行うには多くの方法がありますが、 ASP.NET Webサービスでの認証が有用な概要であることがわかりました。 。