2012-04-14 19 views
4

User.Identity.Nameを使用して、私のdbからデータを照会できるのだろうかと思います。
例:"User.Identity.Name"は安全ですか?

UsersBLL.GetPersonalInformation(string username) 

でしょう、この方法にUser.Identity.Nameの値を渡すことは良いアイデアですか?
User.Identity.Nameの値をハイジャックすることはできますか?

答えて

2

ハイジャックされる可能性がありますか?はい、例えばinsufficient transport layer protection(このリンクのこの実例)によるハイジャックセッションを介した場合などですが、これはメンバーシッププロバイダ自体の実装では危険ではありません。

むしろ周りのユーザー名を渡すよりも、私はIDに固執したい:

var user = Membership.GetUser(); 
var userId = (Guid?)user.ProviderUserKey; 

私は再び、あなたはデフォルトのメンバシッププロバイダを使用している、と仮定しaspnet_Usersユーザテーブル(依存の任意のテーブルを想定します)は、ユーザー名ではなく外部キーとしてIDを使用しています。少なくとも私はそれが事実だと思う!

+0

私はメンバーシップシステムを使用していません。自分のdbだけです。そうです。IDを外部キーとして使用しています。私はdbへの別のラウンドトリップを避けるために私のメソッドにユーザー名を使用していますが、これは悪い習慣ですか?代わりにユーザーIDを渡す必要がありますか?私はちょうどuseridをクエリし、後で使用するためにキャッシュする必要がありますか? – Adir

+0

これは内部実装であり、ハイジャックを容易にするような方法で公開していないので、適切なアクセス制御を使用している限り、正常であるはずです。 –

4

User.Identity.Nameは他の手段と同じように安全です。それを乗っ取ることは可能ですか? SSLを使用し、暗号化されたFormsAuthenticationまたはWindows認証を使用している場合は、sslを使用しておらず、認証メカニズムを暗号化していない場合もあります。

基本的に、セキュリティの慣行が守られている場合は、完全に安全なはずです。少なくともユーザーを特定する他の方法よりも安全性が低い

EDIT:

これは、ユーザ名にあなたのテーブルをキーイングされていないことを前提としてではなく、会員のユーザーIDで、そしてあなたのコードは、名前だけでメンバーシップ・テーブル内のユーザーIDを検索します。

ユーザー名にテーブルを登録する場合は、考慮するセキュリティ上の懸念が数多くあります。ヘンクが彼の答えに言及しているのは、その一つです。ユーザー名の変更や再利用を許可しない場合は問題ありません。

+0

追加すると、アプリケーションが基盤となる認証メカニズムから保護されます。たとえば、Kerberosから双方向SSLまたはClaims-from-hellに切り替えることができ、アプリケーションに大きな変更は必要ありません。 – ixe013

関連する問題