安全Cookie的设计开发C# 第3页
前言
HTTP 协议其轻巧通用、面向对象的特点使它适合在分布式协作环境下使用。HTTP 协议是一种无状态协议,当一个客户向服务器发出请求,然后服务器返回响应,请求完成后,连接就被关闭了。服务器不再保留有关连接的信息,所以当下一次请求并连接时,服务器无法判断本次连接和以前的连接是否同一个用户[1]。所以HTTP的无状态性不能满足某些应用的需求,给Web操作带来种种不便。在此前提下,提出了HTTP的状态管理机制— Cookie机制。现在,Cookie技术已经被广泛的应用与各种网站和个人桌面操作系统,绝大多数的浏览器都支持Cookie技术,或者至少兼容Cookie技术的使用。另一方面,自从这项技术诞生的那天起,它就饱受争议,因为不正当地利用此技术会造成用户信息的安全问题。由于大多数用户对它的功能、使用方法还不十分熟悉,往往在没有任何防备的情况下,被那些居心不良的网站或个人盗走了重要的私人信息(包括计算机的型号配置、个人的银行帐号密码等),造成重大损失[2]。
本设计的目标就是使用强壮合理的加密手段对网站的Cookie信息进行加密处理,杜绝Cookie信息泄露用户隐私,同时使用一定的身份鉴别技术来保证Cookie不会被盗用,从而做到了Cookie信息的安全处理。
本设计在实际应用中有非常重要的价值,如今,网站使用Cookie技术可以记住用户的个性化设置,给用户带来更好的体验;广告商通过Cookie技术可以有针对性的对用户投放广告,提高广告效益,同时可以避免投放不合用户口味的广告造成用户的反感;Cookie技术在网站的身份认证系统中,特别是单点登陆系统中可以得到广泛的应用;在网上购物系统中,通过Cookie技术可以很轻松的实现购物车功能,等等。上述应用中利用本设计中的安全Cookie技术可以保证用户的隐私不会被第三方得知,特别是在身份验证系统中,安全的Cookie设计可以使得网站开发者放心的使用Cookie技术来登陆验证,有效的降低服务器资源消耗,提高效率。
第一章 概 述
1.1 背景知识
HTTP 协议其轻巧通用、面向对象的特点使它适合在分布式协作环境下使用。HTTP协议是针对相互间无连接的事物进行处理,是一种无状态、无连接的协议,不能在服务器上保持一次会话的持续状态信息。但是HTTP的无状态性不能满足某些应用的需求,给Web操作带来种种不便。
在此前提下,提出了HTTP的状态管理机制— Cookie机制。Cookie,有时也用其复数形式Cookies,定义于RFC2109。它是网景公司的前雇员Lou Montulli在1993年3月的发明[12]。在WEB技术发展史上,Cookie技术的出现是一个重大的变革。最先是Netscape1993年在它的Netscape Navigator浏览器中引入了Cookie技术,从那时起,World Wide Web 协会就开始支持Cookie标准。以后又经过微软的大力推广(因为微软的IIS Web服务器所采用的ASP技术很大程度的使用了Cookie技术),即在微软的Internet Explorer浏览器中完全支持Cookie技术[15]。到现在,绝大多数的浏览器都支持Cookie技术,或者至少兼容Cookie技术的使用。
按照Netscape官方文档中的定义,Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由Web服务器保存在用户浏览器上的小文本文件,包含每次用户访问站点时Web应用程序都可以读取的信息。服务器可以利用Cookie包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。无论何时用户链接到服务器,Web站点都可以访问Cookie信息[4]。
一般来说,Cookie通过HTTP Headers从服务器端返回到浏览器上。首先,服务器端在响应中利用Set-Cookie header来创建一个Cookie ,然后,浏览器在它的请求中通过Cookie header包含这个已经创建的Cookie,并且反它返回至服务器,从而完成浏览器的论证[5]。目前有些Cookie 是临时的,另一些则是持续的。临时的Cookie只在浏览器上保存一段规定的时间,一旦超过规定的时间该Cookie就会被系统清除。
1.2 Cookie应用中存在问题
现在,Cookie技术已经被广泛的应用与各种网站和个人桌面操作系统,绝大多数的浏览器都支持Cookie技术,或者至少兼容Cookie技术的使用。另一方面,自从这项技术诞生的那天起,它就饱受争议,因为不正当地利用此技术会造成用户信息的安全问题[6]。由于大多数用户对它的功能、使用方法还不十分熟悉,往往在没有任何防备的情况下,被那些居心不良的网站或个人盗走了重要的私人信息(包括计算机的型号配置、个人的银行帐号密码等),造成重大损失。因为Cookie是以明文的形式保存与传输的,所以存在着一定的危险,通常存在着三种情况的安全攻击[14]:
网络攻击:Cookie是以明文的形式在网络中进行传输的,如果没有安全的信道,该信息在传输过程中就有可能遭到不法之徒的拦截,窃取,篡改,冒用等。
客户端攻击:由于Cookie是以明文的形式保存在客户端的硬盘上的,该信息就有可能被非法用户拷贝,对信息进行冒用,修改等。
服务器端攻击:非法攻击者破坏正常服务器的运行,并冒用该服务器的地址及域名,当用户登录该网站时,非法攻击者就可以获取该用户的信息,并根据获取的信息登录,进行非法操作。
可见,如果不对Cookie的使用采用一些对抗攻击的技术手段,无论对于网站还是对于用户来说,都是非常危险的。因此需要采取措施来对Cookie信息进行处理。
1.3 解决方案
鉴于1.2节中提到的Cookie安全问题,必须采取相应的措施来保证Cookie使用中的安全。安全的Cookie必须具备以下三个方面的特性:
l 机密性
Cookie通常含有用户身份鉴别信息和用户个人资料,因此要求必须确保这些信息的机密性 Cookie信息泄露有两个主要途径:一是在传输途中被截获;二是存储于用户设备时被窃取。[16]
l 完整性
为防止攻击者使用特殊标记向Cookie写入恶意可执行代码,要求必须确保Cookie的完整性 当Cookie被用于用户身份鉴别时,如果Cookie内容被篡改,那么鉴别就会失败。攻击者可以篡改合法用户Cookie内容,阻碍该用户访问特定Web站点。Cookie中域名项和路径项也很重要。如果攻击者篡改这两项,Cookie就会被送至攻击者手中。[16]
l 可鉴别性
将Cookie加密可以抵御非法篡改。但是,攻击者通过向Web站点提交从合法用户处窃取的Cookie,仍然可以假冒该合法用户。因此,要求必须能够校验提供Cookie的实体确是该Cookie合法所有者。[16]
所以,必须针对以上所列出的安全Cookie的三个特性采取相应的措施,才能保证Cookie的安全。本设计的解决方案正是针对此三种特性制定了相应的解决方案:
l 对于“机密性”的解决方案
使用强壮的加密算法对Cookie信息进行加密,可以防止Cookie中的敏感信息的泄露,只有拥有密钥的服务器才可以解密和识别该信息。
l 对于“完整性”的解决方案
使用有效的算法生成MAC(message authentication code)对Cookie信息进行签名。Web服务器读取Cookie后对Cookie进行签名校验,若Cookie被更改了,校验必定无法通过,从而有效的防止了Cookie的伪造和篡改。
l 对于“可鉴别性”的解决方案
在目前的IPV4网络中,将客户端MAC地址或者IP地址加入到Cookie信息中,并加密。服务器读取Cookie后,解密出其中的附加MAC/IP信息,若与客户端当前MAC或IP相符,则认为该Cookie来源合法。在IPV6网络中,将客户端MAC和IP地址都加入到Cookie信息中,并加密。服务器读取Cookie后,解密出其中的MAC和IP信息,若与当前请求的客户端MAC和IP 相符,则认为该Cookie来源合法。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>