代码之家  ›  专栏  ›  技术社区  ›  Alon Gubkin

身份验证cookie

  •  1
  • Alon Gubkin  · 技术社区  · 15 年前

    我正在为我的Web应用程序编写数据库身份验证系统,该系统在ASP.NET MVC中编写。当有人授权时,应该将他的用户名保存在cookies中。使用httpresponse.cookies`保存值为username的cookie是否安全?它不是可以伪造的吗?

    仅保存用户名…这是正确和安全的方式吗?还是应该保存整个用户对象(如果可能的话)?

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

    4 回复  |  直到 15 年前
        1
  •  5
  •   John Gietzen    15 年前

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

    1. 使用A 令牌 .
    2. 搞砸 存储在数据库中的令牌。
    3. 做饼干 只有HTTP5 .

    标记可以由CSPRNG生成,以确保自动登录cookie不会被伪造。

    散列数据库中的令牌可以防止在数据库受到破坏的情况下窃取用户帐户。(请记住,此时的令牌相当于密码。)

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

        2
  •  1
  •   Guffa    15 年前

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

    把cookie编辑成别人的用户名是很容易的,瞧!您现在被授权为该用户。

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

    当然,这并不完全安全,因为您可以欺骗cookie数据和浏览器字符串,但这比将用户名放入cookie安全得多,而且比仅依赖会话ID更安全。

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

        3
  •  0
  •   Andy    15 年前

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

    更好的方法是在cookie中存储一个会话ID(您已经生成了这个ID),并将用户名之类的东西挂在服务器上。

        4
  •  0
  •   Wyatt Barnett    15 年前

    使用内置的表单身份验证框架来处理世界的HTTP传输端,避免重新设计车轮。

    附言:在有人投反对票之前,请记住这一点!=使用sqlMembershipProvider。