“User.Identity.Name”安全吗?

时间:2012-04-14 15:09:16

标签: c# asp.net security forms-authentication

我想知道我是否可以使用 User.Identity.Name 来查询我的数据库中的数据。
例如:

UsersBLL.GetPersonalInformation(string username)

User.Identity.Name 的值传递给此方法是个好主意吗? User.Identity.Name的值是否可以被劫持?

2 个答案:

答案 0 :(得分:4)

User.Identity.Name与其他任何方式一样安全。有可能劫持它吗?也许,如果您没有使用ssl并且您没有加密您的身份验证机制,但如果您使用SSL并使用加密的FormsAuthentication或Windows身份验证,那么您应该没问题。

基本上,如果你遵循良好的安全措施,它应该是非常安全的。至少不比任何其他识别用户的方式安全。

编辑:

这假设您没有在用户名上键入您的表,而是用Membership userid键,而您的代码只是按名称查找成员资格表中的用户ID。

如果您在用户名上键入表格,则需要考虑许多安全问题。其中一个是Henk在他的回答中提到的。如果您不允许更改或重复使用用户名,那么这不是问题。

答案 1 :(得分:2)

它会被劫持吗?是的,例如通过insufficient transport layer protection会话劫持(该链接中的工作示例),但这不是成员资格提供程序实现本身的风险。

不是传递用户名,而是坚持使用ID:

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

我假设依赖于aspnet_Users用户表的任何表(假设您再次使用默认成员资格提供程序),使用ID作为外键而不是用户名。至少我希望是这样的!