cookie&session

0x00 会话控制:

会话控制是一种面向连接的可靠的通信方式,通过会话控制记录和判断用户的登录行为,并且跟踪用户的访问行为。

问题的产生:web应用所使用的HTTP协议,是一种无状态的协议,无法记忆客户端的当前状态。那么要想记录客户端的会话状态就要引入第三方技术,最常见的便是cookie和会话(session)管理。

cookie

  • 服务器分发给客户端的一个变量,用于记录客户端的身份信息。cookie是由服务器提供的存储在客户端的小文本文件,文件里面记录了与用户相关的一些状态或者设置,当用户下一次访问这个网站的时候,网站会先访问用户机器上对应的网站cookie文件,从中读取信息,以便用户实现快速访问。

  • cookie的类型:
    1、 cookie的时效是一个重要的属性值,我们根据属性值的长短将cookie分为持久性和临时性两种cookie。
    2、持久型cookie以文本像是存储在硬盘上,由浏览器存取。
    3、临时型cookie也称会话cookie,存在内存中,关闭浏览器后会立即消失。

  • cookie的属性:
    1、Domain:设置cookie关联的域名
    2、Expires:通过给定一个过期时间来创建一个持久化cookie
    3、HttpOnly:用于避免cookie被js访问
    4、Name:cookie的名称
    5、Path:cookie关联的路径,默认为 /
    6、value:读写cookie的值
    7、secure:用于指定cookie需要通过安全socket层链接。

  • cookie的子域机制:
    1、我们在设置cookie时如果不指定作用域,那么cookie的默认作用域本域。
    2、如果我们为cookie设置了作用域,那么cookie便只能在本域内生效,即当访问其他域时cookie不会自动向后台提交。
    3、但是我们在设置cookie时可以指定cookie的父域,这样同一个子域(如:www.xss.com和aaa.xss.com)就可以共享cookie。

  • 由cookie引发的安全问题:cookie是存储在本地客户端的,这意味着他随时可以被窃取和滥用。其次就是xss漏洞中经常进行的盗取cookie行为。其中为cookie设置httponly属性是xss防护技术之一,下面进行一下httponly属性的测试:
    1、开启httpOnly属性,然后使用js来读取cookie:
    设置cookie的代码如下:
    在这里插入图片描述
    js读取cookie的代码如下:
    cookie&session_第1张图片
    结果如下:
    cookie&session_第2张图片
    并没有读取到设置为httponly的cookie值。
    2、取消httponly设置:
    取消其中一个cookie参数的httponly属性:
    cookie&session_第3张图片
    再次通过js代码读取cookie:
    cookie&session_第4张图片
    可以看到成功读取了cookie值。

0x01 会话(session)管理

鉴于cookie存在本地客户端的性质,以及导致的安全缺陷,我们需要一种更加安全的会话管理机制–session。

  1. 了解session机制:访问者从到达特定主页到离开的那段时间,在这个过程中,每个访问者都会得到一个单独的session。session是基于访问的进程,记录了一个访问的开始到结束。在session机制中,客户端和服务端通过标识符来识别用户身份和维持会话,但这个标识符也存在被其他人利用的可能。session和cookie最大的区别就是session保存在服务器端,cookie保存在客户端

  2. 基于cookie 的sessionid设置:即将sesisionid存储在cookie中,下发给客户端。
    1、要使用session,必须先开启session,开启session之后,客户端访问该页面,session就被注册了,同时会给客户端下发一个sessionid。
    cookie&session_第5张图片
    可以看到下发的这个用户的唯一的sessionid:
    cookie&session_第6张图片
    然后可以查看此时cookie信息,发现存储的也是这个sessionid:
    cookie&session_第7张图片

  3. 会话管理过程:
    当客户端第一次访问页面时。我们在session数组中存储客户端的身份信息,然后下发客户端一个sessionid,存储在cookie值中。当第二次客户端在来访问页面时,先提交自己的sessionid,经过session机制匹配,确认是自己下发的sessionid,然后确认客户端身份信息。
    有一点,不同的客户端访问会产生一个不同的sessionid,每一个客户端都只能看见自己的sessionid,sessionid的管理机制是由php的配置文件决定的,如下:
    cookie&session_第8张图片

  4. 基于GET请求的sessionid设置:当某一项浏览器禁止使用cookie时,可以使用基于GET请求的sessionid,在每一个请求过程中,通过get请求的形式将sessionid发送给服务端,进行身份验证。

  5. session进行会话管理造成的问题:固定会话攻击。虽然session是存储在服务端的,避免了第三方的任意篡改,但是sessionid依然不能避免被第三方盗取,然后冒充正常用户与服务器进行通信。

结束:

cookie和session是常用的会话管理机制,但是有可能造成安全问题,所以使用时需要综合考虑其安全性。

你可能感兴趣的:(WEB安全)