Cookie和Session的理解

本文深入探讨了Cookie和Session的定义、组成、工作原理及其在Web安全中的重要性。阐述了Cookie捕获/重放、恶意Cookies、会话定置和CSRF攻击等安全威胁,并提出了相应的防护措施。同时,对比了Cookie和Session的异同,强调了它们在用户身份验证和会话管理中的作用。
摘要由CSDN通过智能技术生成

1.Cookie

1.1 定义

类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息

关键字:身份识别;Session会话跟踪

1.2 Cookie的组成

Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。

  1. Name/Value:设置Cookie的名称及相对应的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌 [3] 。
  2. Expires属性:设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效 [3] 。
  3. Path属性:定义了Web站点上可以访问该Cookie的目录 [3] 。
  4. Domain属性:指定了可以访问该 Cookie 的 Web 站点或域。Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。当需要实现单点登录方案时,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻击的危险,比如攻击者可以借此发动会话定置攻击。因而,浏览器禁止在 Domain 属性中设置.org、.com 等通用顶级域名、以及在国家及地区顶级域下注册的二级域名,以减小攻击发生的范围 [3] 。
  5. Secure属性:指定是否使用HTTPS安全协议发送Cookie。使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。该方法也可用于Web站点的身份鉴别,即在HTTPS的连接建立阶段,浏览器会检查Web网站的SSL证书的有效性。但是基于兼容性的原因(比如有些网站使用自签署的证书)在检测到SSL证书无效时,浏览器并不会立即终止用户的连接请求,而是显示安全风险信息,用户仍可以选择继续访问该站点。由于许多用户缺乏安全意识,因而仍可能连接到Pharming攻击所伪造的网站 [3] 。
  6. HTTPOnly 属性 :用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性,一些浏览器可以阻止客户端脚本对Cookie的读操作,但允许写操作;此外大多数浏览器仍允许通过XMLHTTP对象读取HTTP响应中的Set-Cookie头

1.3 cookie的工作原理

(1)浏览器端第一次发送请求到服务器端

(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端

(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie

(4)服务器端通过Cookie中携带的数据区分不同的用户

1.4 安全威胁

Cookie捕获/重放

攻击者可以通过木马等恶意程序,或使用跨站脚本攻击等手段偷窃存放在用户硬盘或内存中的Cookie。借助网络攻击手段,包括在不安全的局域网中被动地监听网络通信;通过攻击网络用户的路由器,或通过搭建恶意的无线路由器等手法,控制路由基础设施,将网络流量重定向到攻击者控制的主机;发动DNSPharming(域欺骗)攻击,通过DNS缓存中毒、DNS应答欺骗、或修改用户端的本地域名解析文件等方法攻击DNS系统,导致用户对合法网站的访问请求被重定向到恶意网站等等,同样可能窃取Cookie。对于捕获到的认证Cookie,攻击者往往会猜测其中的访问令牌,试图获取会话ID、用户名与口令、用户角色、时间戳等敏感信息;或者直接重放该Cookie,假冒受害者的身份发动攻击。

恶意 Cookies

Cookies 是文本文件, 一般情况下认为它不会造成安全威胁。 但是,如果在 Cookies 中通过特殊标记语言,引入可执行代码,就很可能给用户造成严重的安全隐患。HTML 为区别普通文本和标记语言,用符号“<>”来指示HTML 代码。 这些 HTML 代码或者定义 Web 网页格式,或者引入 Web 浏览器可执行代码段。 Web 服务 器可以使用Cookies 信息创建动态网页。假使 Cookies 包含可执行恶意代码段,那么在显示合成有该 Cookies 的网页时,就会自动执行这段恶意代码。当然,恶意代码能否真正造成危害,还取决于Web 站点的安全配置策略

会话定置

会话定置(Session Fixation)攻击是指,攻击者向受害者主机注入自己控制的认证Cookie等信息,使得受害者以攻击者的身份登录网站,从而窃取受害者的会话信息。注入Cookie的方法包括:使用跨站脚本或木马等恶意程序;或伪造与合法网站同域的站点,并利用各种方法欺骗用户访问该仿冒网站,从而通过HTTP响应中的Set-Cookie头将攻击者拥有的该域Cookie发送给用户等 [3] 。

CSRF攻击

跨站请求伪造(Cross-Site Request Forgery,简称CSRF)是指,攻击者可能利用网页中的恶意代码强迫受害者浏览器向被攻击的Web站点发送伪造的请求,篡夺受害者的认证Cookie等身份信息,从而假冒受害者对目标站点执行指定的操作。Firefox、Opera等浏览器使用单进程机制,多个窗口或标签使用同一个进程,共享Cookie等会话数据。IE则混合使用单进程与多进程模式,一个窗口中的多个标签,以及使用“CTRL+N” 或单击网页中的链接打开的新窗口使用同一进程,共享会话数据;只有直接运行IE可执行程序打开窗口时,才会创建新的进程。Chrome虽然使用多进程机制,然而经测试发现,其不同的窗口或标签之间仍会共享会话数据,除非使用隐身访问方式。因而,用户同时打开多个浏览器窗口或标签访问互联网资源时,就为CSRF攻击篡夺用户的会话Cookie创造了条件。另外,如果一个Web站点提供持久化Cookie,则CSRF攻击将更直接、更容易。

1.5 安全防护

Web服务器端防护

通过Cookie在客户端与服务器端进行交互,最终实现对用户身份的认证,Cookie成了用户整个身份的代替,其安全性决定了整个系统的安全性,Cookie的安全性问题主要有以下几方面:

  1. Cookie被用户非法篡改,如篡改其中的expire项,可将Cookie的有效期延长;篡改path项可使用户能够访问服务器上不被授权的内容;或修改domain项,使用户能够访问不被授权的服务器从而获得合法用户的信息等;
  2. 被非法用户非法截获,然后在有限期内重放,则非法用户将享有合法用户的合法权益,可能会损害网站方的利益;
  3. 若Cookie被服务器加密,而非法用户通过强力攻击或其他手段获得了相应的加密密钥,则非法用户可以伪造任何合法Cookie,从而可以访问合法用户的所有个性化信息,甚至是账户信息等。

面对诸如此类的攻击手段,有必要从服务器端对Cookie进行安全设计,保护措施主要有

  1. 加入MAC以进行完整性校验;
  2. 防止非法用户非法截获后的重放,可以让用户对相关信息进行数字签名,加强有效性验证;
  3. 对Cookie本身进行随机密钥加密,保证Cookie本身的信息安全 [1] 。
客户端浏览器防护

客户端浏览器为了保证本地的Cookie安全,采取了对不同访问网站的统一Cookie加密,在相应的系统目录下,只可看见一个与Cookie相关的加密文件,而且其中的Cookie文件,已被浏览器加密,用户不可见,在用户访问特定站点的时候,可由浏览器对cookies文件进行调用并进行解密,将特定站点的Cookie发送到指定的站点服务器中,实现对用户的Cookie的认证

主机的安全防护

在原有的服务器端以及客户端对Cookie的安全性控制下,鉴于不同的客户端浏览器对站点的Cookie控制相互独立,可以采取在客户端浏览器对产生的Cookie文件进行基于主机特征的安全性认证,即在浏览器产生Cookie加密文件时,在Cookie文件中加入一段主机的特征,生成一个双层加密的新的Cookie文件;在调用Cookie的时候,通过对Cookie文件进行主机特征的匹配,选择对内层的文件进行解密调用 。

然后,对嵌套了主机序列号的内层密文进行二次加密;内层加密保证对源Cookie内容的加密,保证Cookie信息的不可见,外层加密保证对主机特征的保护,以避免对主机特征的替换,通过对Cookie加入主机特征,以及两次对Cookie加密,可以在原有的防护机制下,为Cookie提供更加安全的保护

2. Session

2.1 定义

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。
Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。
Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留

关键词:会话控制

2.2 Session的工作原理

浏览器端第一次发送请求给服务器,服务器会创建一个session,同时会创建一个特殊的cookie(name为jsessionid的固定值,value为session对象的id),然后将该cookie发送给浏览器

后续浏览器访问服务器的时候,就会携带此cookie对象

服务器端根据浏览器携带的cookie区分不同的用户

name为JSESSIONID(或value为SessionId) 的Cookie不存在(关闭或更换浏览器),重新去创建Session与特殊的Cookie

name为JSESSIONID(或value为SessionId)的Cookie存在,根据value:SessionId去寻找session对象

3. cookie和session的联系与区别

  1. 实际上客户端的Session信息是存储在Cookie中的,如果客户端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了

  2. cookie解决了session的会话有效期问题

3.1 共同之处

都是用来跟踪浏览器用户身份的会话方式

3.2 session 与 cookie 的区别

cookie数据保存在客户端,session数据保存在服务端。session的过期取决于服务器,cookie的过期取决于最初设定的时长。

session

简单的说,当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造。

cookie

如果浏览器使用的是cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。

如果能截取某个用户的cookie变量,然后伪造一个数据包发送过去,就能欺骗服务器

所以你在机器上面保存了某个论坛cookie,有效期是一年,如果有人入侵你的机器,将你的cookie拷走,放在他机器下面,那么他登陆该网站的时候就是用你的身份登陆的。当然,伪造的时候需要注意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值