4

User.Identity.Nameを使用してデータベースからデータをクエリできるかどうか疑問に思います。
元:

UsersBLL.GetPersonalInformation(string username)

User.Identity.Nameの値をこのメソッドに渡すのは良い考えですか?
User.Identity.Nameの値を乗っ取ることができますか?

4

2 に答える 2

4

User.Identity.Nameは、他の手段と同じくらい安全です。ハイジャックすることは可能ですか?たぶん、sslを使用しておらず、認証メカニズムを暗号化していない場合でも、SSLを使用していて、暗号化されたFormsAuthenticationまたはWindows認証を使用している場合は問題ありません。

基本的に、適切なセキュリティ慣行に従っている場合は、完全に安全である必要があります。少なくとも、ユーザーを識別する他の方法と同じくらい安全です。

編集:

これは、ユーザー名ではなくメンバーシップユーザーIDでテーブルにキーを設定していることを前提としており、コードはメンバーシップテーブルでユーザーIDを名前で検索するだけです。

ユーザー名に基づいてテーブルにキーを設定している場合は、考慮すべきセキュリティ上の懸念がいくつかあります。そのうちの1つは、ヘンクが彼の答えで言及していることです。ユーザー名の変更や再利用を許可しない場合は、問題ありません。

于 2012-04-14T15:15:31.493 に答える
2

ハイジャックされる可能性はありますか?はい、たとえば、トランスポート層の保護が不十分なためにセッションハイジャックが発生します(このリンクでのこの作業例)が、これはメンバーシッププロバイダーの実装自体のリスクではありません。

ユーザー名を渡すのではなく、IDに固執します。

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

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

于 2012-04-15T11:15:57.097 に答える