【问题标题】:Can client mock a cookie?客户端可以模拟 cookie 吗?
【发布时间】:2015-11-10 10:29:14
【问题描述】:

我正在使用 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 会发生什么?

如果他这样做,他不需要登录(与 无密码登录的含义相同)。

有什么办法吗?

【问题讨论】:

  • 这是哪个网址?我确定我不会在那个 webapp 上注册 :) 有很多关于如何制作登录系统的文档。你真的要自己写吗?饼干? ;_;
  • @Alex 是的。我已经参考了该文件。但他们都告诉我how to create or how to use a cookie,而不是告诉我how to protect cookie values,就像我的例子一样。我是新来的饼干。你能告诉我更多吗?
  • 不,我会使用现成的解决方案
  • @Alex -- 为什么这对你来说似乎很难,使用 ASP.NET 的内置加密例程最多应该是几个小时。
  • 为什么不使用内置的会员功能来处理授权/认证?

标签: javascript asp.net cookies


【解决方案1】:

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

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

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

【讨论】:

  • SSL 对我来说很昂贵,哈希 cookie 值是一个很好的解决方案。非常感谢霍根先生
猜你喜欢
  • 2021-10-03
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多