Cookie作用
Cookie用来保存用户身份信息。浏览器访问服务器时,会自动把Cookie随请求一起发送给服务端,服务器依靠Cookie识别用户。
举例子:登录谷歌
登录成功后,谷歌服务器向浏览器写入Cookie。后续每次访问谷歌页面,浏览器自动带上Cookie,服务器解析Cookie,就知道是哪个已登录用户。
安全风险
如果Cookie被窃取、拷贝到攻击者电脑,攻击者拿着这份Cookie去访问网站,就可以冒充你的账号登录。
另外页面中的JS脚本,如果存在XSS漏洞,也可以通过JavaScript读取到Cookie,把Cookie发送给黑客,盗取用户身份。
解决方案:HttpOnly 属性
服务器设置Cookie时,加上 HttpOnly=true。
注意:不是仅本台电脑可读。
- JavaScript无法读取该Cookie,防止XSS脚本窃取Cookie;
- Cookie依旧会在浏览器HTTP请求时自动发送到服务器;
- 浏览器本身可以携带、使用这个Cookie,但是JS脚本拿不到Cookie内容。
补充常用安全属性
HttpOnly=true:禁止JS读取Cookie,抵御XSS偷CookieSecure=true:只有HTTPS加密访问的时候,才会发送Cookie,http明文请求不会携带- 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)
Previous: 密码安全
Next: 跨站脚本攻击(XSS)