客户端可以模拟一个cookie

Can client mock a cookie?

本文关键字:一个 cookie 模拟 客户端      更新时间:2023-09-26

我正在使用ASP。. NET并在服务器上创建一个cookie,如下所示:

public void LoginCookie(string id, string name, string loc)
        {
            HttpCookie cookie = new HttpCookie("login");
            cookie["name"] = HttpContext.Current.Server.UrlEncode(name); // user name
            cookie["avatar"] = loc; // user avatar location
            cookie["accountId"] = id; // user id
            cookie.Expires = DateTime.Now.AddDays(180); // default expiring
            HttpContext.Current.Response.Cookies.Add(cookie);
        }

下面是检查用户是否登录的代码:

if (Request.Cookies["login"] != null)
{
   // login successful
}

我的问题是:任何客户端都可以很容易地查看cookie值。那么,如果他嘲笑一个具有相同名称login和相同值name, avatar, accountId的新cookie会发生什么?

如果他这样做了,他不需要登录(与登录没有密码意义相同)。

有办法吗?

这样做的方法是在cookie中存储用户名和用户名的散列。由于客户端不知道您如何生成哈希(您应该使用加密强方法生成哈希),并且无法生成哈希,因此可以通过检查哈希来验证用户是否是您验证的用户。为了真正安全起见,您可能需要在散列中包含时间戳。

或者您可以在身份验证后加密用户名(或者更常见的是userid)并存储它。这是最常用的方法。

您也可以使用SSL或TLS, cookie将被加密。然而,这并不能阻止客户端只是有人监视客户端。