##什么是cookie?##

今天学了xss攻击的原理,以及概念,其中里面的老师讲到了cookie和session,但是我好像忘记了这两个概念,所以顺便回顾也算当作知识的整理吧!

首先cookie产生的背景?

在网络早期时候,服务器是无法知道两个请求是否来自于同一个浏览器的。为了解决这个问题,当时的处理方法就是在请求的时候,在页面中插入一些参数,并在下一个请求中传回参数。这需要使用包含参数的隐藏的表单,或者作为URL参数的一部分进行传递。但是呢,这两个办法都需要手动进行操作,出错率很高。

网景公司当时一名员工Lou Montulli,在1994年将“cookies”的概念应用于网络通信,用来解决用户网上购物的购物车历史记录,目前所有浏览器都支持cookies。

什么是cookie?

cookie翻译过来就是“饼干”的意思,

由于http是无状态的协议,一旦客户端和服务器的数据交换完毕,就会断开连接,再次请求,会重新连接,这就说明服务器单从网络连接上是没有办法知道用户身份的。怎么办呢?那就给每次新的用户请求时,给它颁发一个身份证(独一无二)吧,下次访问,必须带上身份证,这样服务器就会知道是谁来访问了,针对不同用户,做出不同的响应。,这就是Cookie的原理。

其实cookie是一个很小的文本文件,是浏览器储存在用户的机器上的。Cookie是纯文本,没有可执行代码。储存一些服务器需要的信息,每次请求站点,会发送相应的cookie,这些cookie可以用来辨别用户身份信息等作用。就比如说我们每次浏览网页,都会保存一些信息,如:音乐缓存,视频缓存,账户密码等。但是存放用户密码的话就比较危险,比如第一次登录一个网站,存放了个人账户:admin,密码:123456.服务器端将我的信息放到了cookie里面再发送给客户端,那我下一次就不用登录了,因为cookie保存了我的账户信息,我就可以直接在本地读取账户密码登录,这样就不安全了,比如别人通过xss攻击你的计算机,然后就可以直接访问一些保存过你账户信息的网站。

所以,cookie能够提高访问浏览器(服务端请求)的速度,但同时也会带来一些安全隐患。

 

cookie机制

当用户第一次访问登录一个网站的时候,,cookie的设置以及发送会经历4个步骤:

客户端发送一个请求到服务器 --》 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部 --》 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部 --》服务器返回响应数据

cookie的缺点

cookie可以被浏览器禁用。cookie的数量和长度有限制。Cookie存在安全性问题,如果Cookie被人拦截,拦截者不需要知道cookie的含义,只要原样转发cookie就可以实现对服务器的操作。

Cookie常用属性

key和value

key和value一般用字母和数字,如有特殊字符或中文需使用escape()对其进行编码。Javascript中中文属于Unicode编码,在内存中占4个字节,英文属于ASCII字符,在内存中占2个字节。Cookie中使用Unicode字符时需对Unicode字符进行编码,否则会乱码。Cookie中保存中文一般使用UTF-8编码。不推荐使用GBK等中文编码,因为浏览器不一定支持,而且JavaScript也不支持GBK编码。key值是Cookie的名称,Cookie一旦创建,名称便不可更改。

expires

expires表示Cookie的失效日期即生存周期,是一个GMT格式的时间字符串,默认为-1。如果省略expires或将其设置为0或负值,浏览器关闭时cookie失效,这样不会记录用户信息,更加安全。Cookie失效前,即使重启电脑也不会丢失。expires不可读,在Javascript中使用document.cookie不会显示出expires。expires值应该使用GMT格式的时间字符串(GMT即格林尼治标准时间,现在也称为UTC即全球标准时间)。

    //在Javascript中使用expires时应该和cookie同时写入,如:
    document.cookie = "num=123;expires=" + exp;
    //而如下写法是不正确的:
    document.cookie = "num=123";
    document.cookie = "expires=" + exp;
    //这样写会形成两个cookie,第二个Cookie的名称是expires,两个cookie均没有指定失效日期。

path

规定Cookie的服务器路径。只有在指定路径下的页面才可以访问该Cookie(一般设为" / ",表示同一站点的所有页面都可以访问这个Cookie)。

    //路径1:http://localhost:20826/Danger/DangerMajor/index
    //路径2:http://localhost:20826/CHIC/AChemicalInput/KeyIndex
     
    document.cookie="name=123;path=http://localhost:20826/Danger/"
    //该Cookie只能在路径1下访问
     
    document.cookie="name=123;path=/"
    //该Cookie可以在路径1和路径2访问(路径1、2属于同一站点)

当Cookie的path属性为null或省略时,获取当前页面URI作为path值,又分为两种情况。其一URI以" / "结尾时,直接设置为cookie的path值。其二URI不是以" / "结尾时,查看URL里面是否有" / ",如果有,直接截取到最后一个" / ",然后设置为cookie的path值;如果没有,将cookie的path设置为" / "。

domain

规定Cookie的域名(Cookie在指定域名下才可以访问)。

secure和HttpOnly

如果Cookie设置了secure属性,将通过安全的https连接来传输Cookie。secure属性可以防止信息在传递过程中被监听捕获导致信息泄露。如果Cookie设置了HttpOnly属性,前端脚本将无法读取Cookie信息。
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值