首页 > Web开发 > 详细

Cookie及http协议实际应用

时间:2019-09-10 23:12:04      阅读:95      评论:0      收藏:0      [点我收藏+]

Cookie及http协议

HTTP

  • HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议 <!--*

  • HTTP工作流程

* 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。     * 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
* 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
* 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
  • HTTP请求消息Request

    • 请求行、请求头部、空行和请求数据四个部分组成。

    •  

    •  

  • GET和POST的区别

    • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.

    • GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

  • GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

cookie

* cookie是每个客户身份的通行证,相当于一个身份证
* cookie 特点
* 文件有大小限制:4KB(文件若没有大小限制,比如身份牌的重量是140斤,挂脖子能不能累死?)
* 数量限制:(一般浏览器,限制大概在50条左右)
* 读取有域名限制:不可跨域读取,只能由来自 写入cookie的 同一域名 的网页可进行读取。简单的讲就是,谁写的cookie,谁才有权利读取。
* 时效限制:每个cookie都有时效,最短的有效期是,会话级别:就是当浏览器关闭,那么cookie立即销毁,如果没有指定Cookie的时效,那么默认的时效是:*会话级别*
  1. 使用方法

    • 使用 JavaScript 读取 Cookie document.cookie;

    • 使用 JavaScript 设置 Cookie document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT";

    • 使用 JavaScript 删除 Cookie document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

  2. cookie和session的区别和用法(熟读并背诵)

    • cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

    • session:session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。

    • cookie和session结合使用:

web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式: 1. 存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。 2. 将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。

        例如应用于:

  1.   一周内免登陆

  2.    商品浏览记录  等

 

  1. cookie的封装 (document.cookie)

    function setCookie(name, value, iDay) {
    var oDate=new Date();
    oDate.setDate(oDate.getDate()+iDay); //用来设置过期时间用的,获取当前时间加上传进来的iDay就是过期时间
    document.cookie=name+‘=‘+value+‘;expires=‘+oDate;
    };
    function getCookie(name) {
    var arr=document.cookie.split(‘; ‘); //多个cookie值是以; 分隔的,用split把cookie分割开并赋值给数组
    for(var i=0;i<arr[i].length;i++) //历遍数组
    {
    var arr2=arr[i].split(‘=‘); //原来割好的数组是:user=simon,再用split(‘=‘)分割成:user simon 这样可以通过arr2[0] arr2[1]来分别获取user和simon
    if(arr2[0]==name) //如果数组的属性名等于传进来的name
    {
    return arr2[1]; //就返回属性名对应的值
    }
    return ‘‘; //没找到就返回空
    }
    };
    function removeCookie(name) {
    setCookie(name, 1, -1); //-1就是告诉系统已经过期,系统就会立刻去删除cookie
    };

         像下面的也都涉及到cookie的应用

  1. 简单购物车的应用

  2. 照片墙的记录

  3. 购物车的多条记录保存

掌握cookie 的安全策略

* Cookie具体工作过程描述如下:
?
1)Web 客户端通过浏览器向 Web 服务器发送连接请求, 通过 HTTP 报文请求行中的 URL 打开某一 Web页面。
?
2)Web 服务器接收到请求后,根据用户端提供的信息产生一个 Set-Cookies Head
?
3)将生成的Set-Cookies Header通过 Response Header存放在 HTTP 报文中回传给 Web 客户端,建立一次会话连接。
?
4)Web 客户端收到 HTTP 应答报文后,如果要继续已建立的这次会话,则将 Cookies 的内容从 HTTP 报文中取出,形成一个 Cookies文本文件储存在客户端计算机的硬盘中或保存 在客户端计算机的内存中。
?
5)当 Web 客户端再次向 Web 服务器发送连接请求时, Web 浏览器首先根据要访问站点的 U R L 在本地计算机上寻找对应的 Cookies文本文件或在本地计算机的内存中寻找对应的 Cookies 内容。如果找到,则将此 Cookies 内容存放在 HTTP 请求报文中发给 Web 服务器。
?
6)Web 服务器接收到包含 Cookies 内容的 HTTP 请求后, 检索其 Cookies 中与用户有关的信息,并根据检索结果生成一个客户端所请求的页面应答传递给客户端 。
?
* COOKIE安全分析
* Cookie 泄漏(欺骗)
cookie在http协议中是明文传输的,并且直接附在http报文的前面,所以只要在网络中加个嗅探工具,获取http包,就可以分析并获得cookie的值。

此时,当我们获取到别人的cookie的值,就产生了一种攻击漏洞,即cookie欺骗。我们将获取到的cookie值加在http请求前,服务器就会把我们当作是该cookie的用户,我们就成功的冒充了其他用户,可以使用其他用户在服务器的资源等。

既然明文cookie不安全,那么我们就使用加密传输cookie。这样即使数据包被截取,cookie也不会被泄漏。把http协议改成加密的https。

在HTTPS也不安全的情况下,我们考虑cookie 自身属性。
?
Cookie 中有个属性secure,当该属性设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该cookie信息,所以不会被窃取到Cookie 的具体内容。就是只允许在加密的情况下将cookie加在数据包请求头部,防止cookie被带出来。

另一个是 HttpOnly属性,如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。

secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,HttpOnly属性的目的是防止程序获取cookie后进行攻击。
    * COOKIE防护
        1. ”重名检查“
但是这个有难度。因为cookie 时RFC定义的,而修改RFC中的cookie 标准是有困难的。
2. 清理cookie
Cookie是由于便利性而存在的,那么总是在使用后清除cookie,其实就达不到cookie的便利作用了。
3. 不在 Cookies 中存放敏感信息。
这是一个 理想化的思路,其实质就是抛弃 Cookies,但明显违背安全平台的设计思路,不能因为 Cookies 可能存在欺骗攻击而废止它的便利性。
?
掌握cookie 的封装
掌握cookie跟json的配合

增加 1. localStroage

    * 浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性
?
* 目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换
?
* localStorage在浏览器的隐私模式下面是不可读取的
?
* localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡
?
* localStorage不能被爬虫抓取到
2. 使用方式
* window.localStorage.setItem()
* window.localStorage.clear()
* window.localStorage.removeItem("name")
* window.localStorage.getItem()
* window.localStorage.name
* window.localStorage.key(0)

 

Cookie及http协议实际应用

原文:https://www.cnblogs.com/cxf1214/p/11503052.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!