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。

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

于 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 回答