Cookie与前端安全

目录

一、Cookie的作用

二、cookie与http协议

1. http响应——cookie的生成

2. http请求——cookie的发送

三、Cookie的属性

1. Expires,Max-Age

2. Domain,Path

3. Secure,HttpOnly

4. SameSite

四、安全

1. csrf攻击

2. xss攻击

五、其他


一、Cookie的作用

1. 介绍

        因为http请求是无状态的,不会记忆之前的信息,前后两次请求是没有关系的。而有些请求需要记录状态,就需要通过Cookie携带信息发送到服务器,从而返回不一样的回应。

        cookie是服务器保存在浏览器的一块文本信息,浏览器每次向服务器发出请求,就会自动附带这段信息。

2. 作用

        cookie用来区分用户、存储用户访问网站的一些信息,使用场景如下:

  • 保存登录状态、购物车、记住密码下次自动登录等功能。  
  • 个性化信息:保存用户的偏好,比如网页的字体大小、背景色等。
  • 记录用户浏览器数据,进行商品推荐。

二、cookie与http协议

1. http响应——cookie的生成

// 该代码会在浏览器保存一个名为foo的cookie,值为bar
Set-Cookie:foo=bar

 (1)如果服务器想在浏览器保存cookie,就要在http响应的头部,放入Set-Cookie字段。http响应可以包含多个Set-Cookie字段,每个Set-Cookie字段也可以包含cookie的多个属性。

// 原信息
Set-Cookie:key1=value1; domain=abc.com; path=/blog
// 修改信息
Set-Cookie:key1=value2; domain=abc.com; path=/blog

(2)如果服务器想改变之前设置的Cookie,必须同时满足4个条件:Cookie的key、domain、path和secure匹配(不是相等)。

2. http请求——cookie的发送

// 向服务器发送名为foo的cookie,值为bar
Cookie:foo=bar

 (1)浏览器向服务器发送http请求时,要在http请求的头部,设置Cookie字段,从而带上相应的Cookie(也就是把之前保存的信息再发送回去)。Cookie字段可以包含多个Cookie。

(2)服务器收到cookie时,有两点是无法知道的:

  • Cookie的各种属性
  • 哪个域名设置的Cookie,到底是一级域名还是二级域名设置的。

三、Cookie的属性

1. Expires,Max-Age

Expires:具体的到期时间。过期后,浏览器就不再保留这个cookie。

Max-Age:从现在开始cookie存在的秒数,优先级高于Expires。

不设置/null:cookie只在当前会话存在,浏览器窗口关闭后,当前session结束,cookie就被删除。

2. Domain,Path

(1)Domain:指定cookie属于哪个域名。以后浏览器向服务器发送请求时,通过该属性判断是否要携带cookie。默认为当前域名。

(2)Domian属性的规则:Domain属性只能是当前域名或当前域名的上级域名,且不能是顶级域名或公共域名,否则浏览器会拒绝设置该cookie。----浏览器发送cookie时,Domain属性必须是当前域名或其上级域名。

(3)Path:指定浏览器发送http请求时,哪些路径要附带这个cookie。只要Path属性是请求路径的开头一部分,就会在头信息中带上这个cookie。(前提是Domain符合条件)

3. Secure,HttpOnly

(1)Secure:指定浏览器只有在https协议下(当设置为true时),才能将cookie发送到服务器。如果当前协议是http,则会忽略secure属性。

(2)HttpOnly:指定该cookie无法通过JS脚本拿到,例如document.cookie、XMLHttpRequest对象都拿不到该属性,只有浏览器发送http请求时才会带上该cookie。可以防止xss攻击,不让cookie被脚本读到。

4. SameSite

(1)用来防止用户追踪和防止csrf攻击

(2)第三方cookie:由第三方网站引导而附带发送的cookie。它不仅会导致csrf攻击,还能用于用户追踪(facebook网站在第三方网站插入一张图片,当浏览器执行该部分代码时,就会向facebook发送带cookie的请求,从而让facebook知道了你是谁,访问了什么网站)。

(3)可以设置的3个值,来限制第三方cookie。

  • Strict:禁止第三方cookie。跨站点时,任何情况下都不会发送cookie。
  • Lax:大多情况下也是禁止第三方cookie,但是导航到目标网站的get请求(包含链接、get表单等)除外。默认值
  • None:关闭SameSite属性,前提是同时设置secure属性,否则无效。

四、安全

1. csrf攻击

        csrf攻击---跨站请求伪造:恶意网站伪造了带有正确cookie的http请求。

        举例:用户登录微博www.weibo.com后,微博服务器会发送一个cookie,用户后来又访问了恶意网站,网站中有www.weibo.com/api(子作用域),那么当用户访问该连接时,微博服务器就会收到带有正确cookie的请求,服务器就会认为是本人在操作,从而导致账号被劫持。

        防御措施:

        (1)设置SameSite:Strict或Lax都可以,让cookie不随第三方网站发出。

        (2)验证token:浏览器发起请求后,服务器会返回一个token。之后每次请求都要同时带上token和cookie才会被认为是合法请求。

2. xss攻击

        xss攻击——跨站脚本攻击:注入恶意script代码到网页中,当用户浏览该页面时,就会执行这些script代码,从而实现恶意攻击。

        常见的有3种类型:

        (1)存储型(持久):恶意代码存储在目标服务器上,当浏览器发送请求时,该恶意代码会随响应报文传回并解析执行。【与反射型的区别在于提交代码是否会存储在服务端】

        场景:用户评论区,提交包含一条恶意代码的评论到数据库,其他用户看到该评论时,恶意代码会随响应报文返回,浏览器解析xss代码。

        (2)反射型(非持久)恶意代码出现在url中,当发请求时会作为输入提交到服务端,然后该恶意代码随响应报文一起传给浏览器,最后浏览器会解析执行该恶意代码。

        (3)DOM型:不经过服务端,通过修改dom节点,把恶意代码插入到了页面。【与后两者的区别在于不经过服务端】

        DOM型属于JS自身的安全漏洞,前两种属于服务端的安全漏洞。

        防御措施:

        (1)HttpOnly:许多xss攻击目标是为了窃取用户cookie,设置httpOnly可以防止JS获取cookie。

        (2)输入检查:对输入内容的<script>等标签进行转义或过滤,转义<>&等字符。

五、其他

1. window.navigator.cookieEnabled:布尔值,表示浏览器是否打开cookie这个功能。

2. document.cookie:返回当前网页的所有cookie(该cookie没有httpOnly属性)。

3. 一般,对于单个域名来说,设置的cookie不应超过30个,每个cookie大小不能超过4KB,超过之后,cookie会被忽略。

4. 区分cookie时不考虑协议和端口。

http://abc.com
https://abc.com
http://abc.com:8080
这3个域名的cookie通用

5. 哪些请求会携带cookie

        浏览器访问某个路径之前,就会找出对该域名domain和路径path有效,并且还没有到期的cookie,一起发送给服务器。

6. 域名

1. 根域名 .
2. 顶级域名(一级域名)
        ·按国家划分:.cn中国,.hk香港
        ·按组织性质划分:.com   .org    .net等
    所有baidu.com是一级域名

3. 二级域名(2个点)
    .baidu.com,.zhihu.com
    www.baidu.com
        
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值