validationCookie

我正在为我的Web应用程序编写一个数据库身份validation系统,这是在ASP.NET MVC中编写的。 当有人授权时,应将其用户名保存在cookie中。 使用HttpResponse.Cookies`来保存其值为用户名的cookie是否安全? 难道不是可以伪造的吗?

仅保存用户名…这是正确和安全的方式吗? 或者我应该保存整个User对象(如果这实际可能)?

谢谢你,对不起我的英语。

不,保存用户名是非常不安全的,因为它很容易伪造。 这是我的指导方针:

  1. 使用令牌
  2. 在令牌存储在数据库中时对其进行哈希处理。
  3. 让cookiesHttpOnly

可以通过CSPRNG生成令牌,以确保自动登录cookie不会伪造。

在数据库被泄露的情况下,在数据库中散列令牌会阻止用户帐户窃取。 (请记住,此时的令牌是密码等效的。)

HTTP-Only cookie可防止可能窃取cookie的XSS攻击。

不,在cookie中保存用户名以标记其授权的用户不是正确的方式,并且它绝对不安全。

将cookie编辑为别人的用户名非常容易,瞧! 您现在已被授权为该用户。

相反,您应该在cookie中存储一些非特定于用户的信息,但特定于用户会话。 您可以从浏览器字符串创建一个值(以某种方式加扰以使其不那么明显)并将值存储在cookie和服务器上的会话数据中。 当用户发送下一个请求时,您可以validation该值是否来自同一会话和相同的浏览器配置。

它当然不是完全安全的,因为你可以欺骗cookie数据和浏览器字符串,但它比将用户名放在cookie中更安全,并且比仅仅依赖会话ID更安全。

要获得真正安全的身份validation,您必须使用SSL。

如果您将用户名存储在cookie中,那么有人可以很容易地更改该用户名。

一种更好的方法是在cookie中存储一个会话ID(你已经生成了),并在服务器中挂掉用户名等用户名。

使用内置的表单身份validation框架来处理世界的HTTP传输端,并避免重新发明轮子。

PS:在有人downvotes之前,请记住FormsAuthentication!=使用SqlMembershipProvider。