Cookie的安全问题

Cookie作用

Cookie用来保存用户身份信息。浏览器访问服务器时,会自动把Cookie随请求一起发送给服务端,服务器依靠Cookie识别用户。

举例子:登录谷歌
登录成功后,谷歌服务器向浏览器写入Cookie。后续每次访问谷歌页面,浏览器自动带上Cookie,服务器解析Cookie,就知道是哪个已登录用户。

安全风险

如果Cookie被窃取、拷贝到攻击者电脑,攻击者拿着这份Cookie去访问网站,就可以冒充你的账号登录。
另外页面中的JS脚本,如果存在XSS漏洞,也可以通过JavaScript读取到Cookie,把Cookie发送给黑客,盗取用户身份。

解决方案:HttpOnly 属性

服务器设置Cookie时,加上 HttpOnly=true

注意:不是仅本台电脑可读。

  1. JavaScript无法读取该Cookie,防止XSS脚本窃取Cookie;
  2. Cookie依旧会在浏览器HTTP请求时自动发送到服务器;
  3. 浏览器本身可以携带、使用这个Cookie,但是JS脚本拿不到Cookie内容。

补充常用安全属性

  1. HttpOnly=true:禁止JS读取Cookie,抵御XSS偷Cookie
  2. Secure=true:只有HTTPS加密访问的时候,才会发送Cookie,http明文请求不会携带
  3. SameSite:防止跨站请求伪造CSRF攻击


HttpOnly 不能防止别人复制你的浏览器Cookie文件(别人直接来到你的电脑旁边,通过U盘拿你的Cookie)。如果别人拿到你本地浏览器完整Cookie文件,依旧可以冒充登录;它主要防护网页JS脚本窃取Cooki这一类攻击。

设置示例(C#)

HttpCookie cookie = new HttpCookie("userToken");
cookie.Value = "登录身份凭证";
cookie.HttpOnly = true;   // 开启HttpOnly,JS不可读取
cookie.Secure = true;
Response.Cookies.Add(cookie);Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注