2011-01-26 5 views
4

私はASP.net(c#)ページ "doSomething.ashx"にXMLHTTPリクエストを行う古典的なASPページを持っています。両方とも同じサーバー上にホストされています。保証要求がローカルサーバーから来た

悪意のあるユーザーがdoSomething.ashxページにアクセスして偽のリクエストをしないようにするには、リクエストがローカルサーバーから送信されることをどのようにして保証できますか?

編集:ちょうど同様

HttpContext.Current.Request.IsLocal 

仕事:私はを通じてユーザー名+ PWを渡ししますが、可能性が忘れてしまった

愚かな?または、これは創造的なハッカーに苦しむことができますか?

+1

あなたが要求に、いくつかの認証を追加することを考えたことがありますか?あなたのリクエストでは、HTTP経由か、またはuid/pwdの組み合わせを使用しますか? – Lazarus

+0

Dohありがとう!それは動作します –

答えて

7

、プロパティがあります:

context.Request.IsLocal 

要求が同じマシンから来ている場合は、このブール値がtrueであります!

MSDNドキュメント:

The IsLocal property returns true if the IP address of the request originator is 127.0.0.1 or if the IP address of the request is the same as the server's IP address.

+0

+1。誰かが本当にあなたのIPスタックをborksしない限り、これは動作します。しかし、ローカルホストに対してのみ信頼性があります。 127.0.0を偽造している別のコンピュータからHTTPリクエストを行う方法はありません(tcpネゴシエーションは失敗します)。 – TomTom

+0

理論的には、この方法で認証する必要はありませんか? –

+0

XMLHTTPリクエストを行っている場合は、クライアントブラウザとユーザIPを使用して行われます。 IPがローカルではないので、これは失敗します。代わりにセッショントークンを使用してください。 –

1

シンプルに、要求を認証します。

+0

HttpContext.Current.Request.IsLocalは動作しますか? –

+0

私は正直に分かりませんが、私はそれに頼るつもりはありません。私の推測は、IPアドレスをチェックすることです。おそらくそれをしないのが最善です。または、少なくとも、真の認証との組み合わせでのみ行うことを検討してください。とにかく将来あなたを助け、達成しようとしていることを説明します。 –

2

そのリクエスト/セッションに固有のトークンを追加する必要があります。 認証されているだけであれば、その人が詳細を持っていてもそのユーザーから「偽造」されている可能性があります。

「既知の」トークンを有効期限付きでチェックするか、セッションベースのシステムを使用して、要求ハンドラで有効であることを確認することができます。

トークンだけを使用している場合。要求を行うページを送信するときにサーバー上で生成する必要があり、要求自体を処理するときにチェックされます。 HttpRequestオブジェクトで

関連する問題