ASP.NET Forms身份验证的授权安全性

yoj*_*o87 5 asp.net security asp.net-mvc authorization forms-authentication

我在ASP.NET MVC网站中使用Forms身份验证,我在AuthCookie中存储用户帐户登录名,如下所示:

FormsAuthentication.SetAuthCookie(account.Login, false);
Run Code Online (Sandbox Code Playgroud)

我想问一下,如果有一种可能性,即用户在客户端会以某种方式管理AuthCookie改变自己的登录名,因此他将例如冒充有人用更高的权限和授权做更多的动作比他通常应该有.另外最好保存在此cookie用户帐户登录名或用户帐号ID中吗?

Rob*_*nik 1

Cookie 已加密,因此出现这种情况的可能性很小。但仍然。

不止一种财产方法

如果您想让安全性更加严格,您可以保存用户名以及用户 ID 或其他一些无法从用户名中猜出的数据。这些的组合使它更安全,因为如果你能猜出一个,就很难猜出其他的并使用它们的正确组合。IE。如果您猜测其他用户的电子邮件/用户名,则猜测同一用户的 ID 会有点困难,因为它们不相关。因此,组合的不相关属性越多,获得正确组合所需的步骤就越多。

登录安全令牌方法

您可以使用此场景中描述的替代方法:

  1. 用户登录。
  2. 生成一个随机安全登录令牌,该令牌可以具有随机长度并定义一些最小长度,并将其针对用户保存在数据存储中。这可能不是问题,但其他数据(例如LastLogonDate信息)在登录时存储是很常见的。
  3. 使用此令牌并将其保存在 cookie 中,而不是用户名或其他信息。
  4. 如果用户注销,请从数据存储中清除登录安全令牌
  5. 用户再次登录...返回到 1 并再次创建一个新令牌并在本次会话中使用它。

这样,从长远来看,它会使其更安全,因为此信息会在每次登录时发生变化,如果用户手动注销,您始终可以从存储中清除该令牌,因此根本不可能注入其他人的身份。这确实使使用永久 cookie 变得更加复杂,但仍然可以做到。

这种方法并非万无一失,但它提供了额外的安全级别,可以在一个帐户遭到破坏时防止反复发生相同的攻击。而且,当一个帐户受到威胁时,并不意味着其他帐户也会受到威胁。如果您的安全令牌足够长,那么在您的网站上发起暴力攻击就会困难得多,并且虽然执行这种攻击,但安全令牌会发生变化,因此绝对更安全。