基于Cookie和Session的身份认证机制的研究与实现

2014-04-15 01:31姜晗任翠池王磊
中国教育技术装备 2014年4期

姜晗 任翠池 王磊

摘 要 Cookie是解决HTTP协议无状态性的主要方法,是实现Web认证的主要手段。通过系统分析Cookie的工作原理和应用特点,指出该认证机制容易遭受安全的威胁,提出并实现一种安全性较高的基于Cookie和Session相结合的身份认证的机制。

关键词 Cookie安全;Session;时间随机码;RSA公钥加密算法

中图分类号:TP393 文献标识码:B

文章编号:1671-489X(2014)04-0036-02

以Web技术为代表的Internet网络技术的迅速发展,促使人类社会正逐渐进入一个以Internet为中心的信息时代。应用层协议HTTP是Web应用的实现基础,而HTTP协议本身是一种无状态的协议,不能记录客户端的状态信息。然而Web应用系统中很多情况下都需要维持这种状态信息,HTTP协议的这种无状态、面向非连接的缺陷很不利于Web应用的发展。为了解决这个问题,由Netscape公司推出了一项HTTP的状态管理机制——Cookie。Cookie的出现弥补了HTTP协议无状态、面向无连接的缺陷,为应用系统记录客户端的状态信息以及对访问者进行身份认证等操作程序的开发带来很大方便。然而,由于Cookie信息在存储和传送过程中都是以明文形式进行的,当Cookie被作为一项便利的工具在Web中大量使用时,其安全性不得不引起用户的注意。

本文主要分析Cookie的工作原理及应用特点,找出运用Cookie存在的安全隐患。针对这些安全隐患,提出并实现基于Cookie和Session相结合的身份认证机制,并且利用RSA公钥加密算法对Cookie信息进行加密,提高身份认证机制的安全性。

1 Cookie的工作原理及应用分析

根据Netscape公司的官方文档中的定义,Cookie是指在HTTP协议下,服务器或脚本可以维护客户端计算机上信息的一种方式[1]。Cookie是借助于HTTP报文头Set-Cookie来传送和交换信息的。Cookie定义了两种HTTP的报文头:Set-Cookie报文头和Cookie报文头。Set-Cookie报文头包含于Web服务器的响应头(Response Header)中,Cookie报文头包含在浏览器客户端请求头(Request Header)中。当用户通过Web浏览器首次打开某一站点时,Web服务器将客户端的信息写进HTTP响应报文的Set-Cookie中,与HTTP响应一起发往Web浏览器。当用户通过Web浏览器发送后续的请求时,Web浏览器要根据Web站点的URL从客户端取出Cookie,并添加到HTTP请求报文中发送给Web服务器。

2 Session机制的应用分析

Session在RFC2109中的定义是:允许客户端和服务器端通过使用HTTP的请求与响应头中的数据来交换状态信息的技术。实际上Session就是客户端和服务器通过Cookie建立的一种对应关系,这种对应关系在RFC2109(HTTP State Management Mechanism)中被定义为术语“Session”。 每一个Session都是有始有终的,在用户登录时建立,在用户退出时删除。

通过Cookie来建立Session是RFC2109中规定的标准方法。服务器在HTTP响应头的Set-cookie中设置Cookie值,与HTTP响应报文一起发往客户端;客户端在后续的访问中必须将Cookie值附加在HTTP请求报文的头部一起发往服务器。在服务器设置Set-cookie的同时也将Cookie的内容写入Session。为了让客户端的每一个Session都有唯一的一个Cookie与它对应,在Cookie中选择一个能够区分每一个Cookie的值作为Session的标识。

这样,Cookie和Session之间通过这个值就建立了对应关系,根据Cookie就可以找到相应的Session了。在用户退出系统时,服务器会将与该用户相对应的Session删除。

3 基于Cookie和Session的身份认证机制的实现

根据上面介绍的基本原理,本文通过编写cgi程序在Linux平台上实现了基于Cookie和Session相结合的身份认证机制。本实现来源于网络视频监控系统项目中的一个模块,为了保证系统的安全性,用户登录系统后的所有操作都需要再次进行身份认证。为了方便用户的使用,后续的身份认证不再需要用户输入用户名和密码,而是通过Cookie和Session自动进行身份认证。

基于Cookie和Session的身份认证的原理及过程分析 基于Cookie和Session的身份认证机制的实现原理是:比较Cookie中绑定的IP地址和系统自动生成的随机码与保存在Session中的IP地址和随机码是否一致,若一致则能够通过身份认证,否则不能够通过身份认证。该认证机制涉及两类应用界面:一个是用于输入用户名、密码的登录界面index.html,它是基于用户名、密码的初始身份认证,是合法用户进入系统的唯一通道;另一类是用户成功进入系统后的操作界面,统记为operating.cgi,它是用户完成各种操作的平台。用户凭借合法的用户名、密码进入系统后,看到的只是他理论上能够操作的菜单,是否能够操作取决于再次进行身份认证的成功与否。此次身份认证就是基于Cookie和Session的认证。

通过用户名、密码初始认证与后续的请求认证过程如图1、图2所示。

该身份认证过程描述及主要实现代码如下。

1)用户在登录界面index.html上提交用户名、密码,发出HTTP请求。

2)服务器接收到HTTP请求,验证用户提交的信息是否合法。若合法,则服务器将用户的用户名、IP地址以及系统自动生成的随机码等信息经过RSA算法加密后写进HTTP的响应头的Set-Cookie,同时将这些信息也存入服务器端的Session,然后返回HTTP响应;若不合法,则返回验证失败的信息。

3)客户端收到服务器端的HTTP响应后,提取HTTP响应头Set-Cookie中的信息并存储在客户端的Cookie中,等再次向该服务器发出后续请求时连同存储在客户端中的Cookie一起发往服务器。

4)服务器接收到客户端的HTTP请求后,提取并使用RSA算法解密Cookie中的信息,然后将解密后的Cookie信息中的用户IP地址和系统自动生成随机码与服务器端Session中的IP地址和随机码相比较,若一致则返回客户端请求的HTTP响应,否则返回出错信息。

基于Cookie和Session的身份认证机制的安全性分析 通过上述的实现过程可知,用户只有通过合法的用户名、密码的初始认证后,服务器才能为该用户生成相应的Cookie和Session信息。因此,即使攻击者通过恶意程序等手段截获了Cookie信息,假冒合法用户的身份进行攻击也是困难重重。首先,在服务器端与客户端之间传送的Cookie信息是经过RSA加密处理之后的,根据RSA加密算法的特点,攻击者想要破解密文是相当困难的;其次,即使攻击者破解了Cookie密文,由于Cookie中含有系统自动生成的随机码,只要Cookie中的随机码和Session中的随机码不一致,攻击者依旧不能访问系统资源。

因此,在应用系统中使用基于Cookie和Session相结合的身份认证机制,增加了攻击者利用Cookie的捕获/重放、Session定置以及跨站请求伪造等手段进行攻击的难度,在一定程度上提高了系统的安全性。

4 结束语

Cookie是实现身份认证的主要手段。鉴于Cookie机制的不安全性,本文提出并实现了使用Cookie和Session相结合的方法,并使用RSA加密算法对Cookie进行加密的身份认证机制,该机制提高了利用Cookie进行身份认证的安全性,具有一定实用性。

参考文献

[1]李馥娟.基于Cookies的Web应用分析及其安全研究[J].网络安全技术与应用,2009(8):88-91.

[2]胡忠望,刘卫东.Cookie应用与个人信息安全研究[J].计算机应用于软件,2007,24(3):50-53.

[3]刘啸.基于Cookie欺骗的Session渗透入侵分析及其安全模型研究[D].杭州:浙江大学:10-12.