User.Identity.Nameを使用して、私のdbからデータを照会できるのだろうかと思います。
例:"User.Identity.Name"は安全ですか?
UsersBLL.GetPersonalInformation(string username)
でしょう、この方法にUser.Identity.Nameの値を渡すことは良いアイデアですか?
User.Identity.Nameの値をハイジャックすることはできますか?
User.Identity.Nameを使用して、私のdbからデータを照会できるのだろうかと思います。
例:"User.Identity.Name"は安全ですか?
UsersBLL.GetPersonalInformation(string username)
でしょう、この方法にUser.Identity.Nameの値を渡すことは良いアイデアですか?
User.Identity.Nameの値をハイジャックすることはできますか?
ハイジャックされる可能性がありますか?はい、例えばinsufficient transport layer protection(このリンクのこの実例)によるハイジャックセッションを介した場合などですが、これはメンバーシッププロバイダ自体の実装では危険ではありません。
むしろ周りのユーザー名を渡すよりも、私はIDに固執したい:
var user = Membership.GetUser();
var userId = (Guid?)user.ProviderUserKey;
私は再び、あなたはデフォルトのメンバシッププロバイダを使用している、と仮定しaspnet_Usersユーザテーブル(依存の任意のテーブルを想定します)は、ユーザー名ではなく外部キーとしてIDを使用しています。少なくとも私はそれが事実だと思う!
User.Identity.Nameは他の手段と同じように安全です。それを乗っ取ることは可能ですか? SSLを使用し、暗号化されたFormsAuthenticationまたはWindows認証を使用している場合は、sslを使用しておらず、認証メカニズムを暗号化していない場合もあります。
基本的に、セキュリティの慣行が守られている場合は、完全に安全なはずです。少なくともユーザーを特定する他の方法よりも安全性が低い
EDIT:
これは、ユーザ名にあなたのテーブルをキーイングされていないことを前提としてではなく、会員のユーザーIDで、そしてあなたのコードは、名前だけでメンバーシップ・テーブル内のユーザーIDを検索します。
ユーザー名にテーブルを登録する場合は、考慮するセキュリティ上の懸念が数多くあります。ヘンクが彼の答えに言及しているのは、その一つです。ユーザー名の変更や再利用を許可しない場合は問題ありません。
追加すると、アプリケーションが基盤となる認証メカニズムから保護されます。たとえば、Kerberosから双方向SSLまたはClaims-from-hellに切り替えることができ、アプリケーションに大きな変更は必要ありません。 – ixe013
私はメンバーシップシステムを使用していません。自分のdbだけです。そうです。IDを外部キーとして使用しています。私はdbへの別のラウンドトリップを避けるために私のメソッドにユーザー名を使用していますが、これは悪い習慣ですか?代わりにユーザーIDを渡す必要がありますか?私はちょうどuseridをクエリし、後で使用するためにキャッシュする必要がありますか? – Adir
これは内部実装であり、ハイジャックを容易にするような方法で公開していないので、適切なアクセス制御を使用している限り、正常であるはずです。 –