深入解析Cookie技术

2015-04-05 10:49:57吕俊宏周江峰
数字通信世界 2015年6期
关键词:服务端浏览器站点

吕俊宏,周江峰

(河北省财政厅,石家庄 050051)

深入解析Cookie技术

吕俊宏,周江峰

(河北省财政厅,石家庄 050051)

在Web技术的发展史上,Cookie技术的出现是一次重大的变革。但是,Cookie技术又是一项非常有争议的技术,从它诞生之日起就成为广大网络用户和Web开发人员的一个争论焦点,原因不是Cookie的功能太弱,而是认为Cookie的使用会对网络用户的隐私信息构成危害。

网络安全;Cookie;隐私;大数据;广告骚扰

1 引言

Cook ie技术最先被Netscape公司引入到Navigator浏览器中。之后,World Wide Web协会支持并采纳了Cookie标准,微软也在Internet Explorer浏览器中使用了Cookie。现在,绝大多数浏览器都支持Cookie,或者至少兼容Cookie技术的使用。目前,几乎所有的网站设计者都使用了Cookie技术。Cookie的广泛使用导致了人们对个人信息安全的担忧。有的网站和机构滥用Cookie,未经访问者的许可就搜集他人的个人资料,达到构建用户数据库、发送广告等营利目的,造成用户隐私信息的泄露。

因此,系统研究Cookie的技术特性及其存在的安全问题,研究防范Cookie泄露用户隐私信息的措施,不仅能使个人信息的安全得到保障,而且能更安全地利用Cookie技术服务于互联网应用。

2 Cookie技术分析

2.1 Cookie定义及其功能

Cookie是一小段文本信息,伴随着用户请求和页面在Web服务器和浏览器之间传递。Cookie包含每次用户访问站点时Web应用程序都可以读取的信息。

因为HTTP协议是无状态的,对于一个浏览器发出的多次请求,Web服务器无法区分是不是来源于同一个浏览器。所以,需要额外的数据用于维护会话,Cookie正是这样的一段随HTTP请求一起被传递的额外数据。

Cookie只是一段文本,所以它只能保存字符串。而且浏览器对它有大小限制,它会随着每次请求被发送到服务器,所以应该保证它不要太大。Cookie的内容也是明文保存的,有些浏览器提供界面修改,所以不适合保存重要的或者涉及隐私的内容。

大多数浏览器支持最大为4096字节的Cookie,最好用Cookie来存储少量数据或者存储用户ID之类的标识符。用户ID随后便可用于标识用户,以及从数据库或其他数据源中读取用户信息。浏览器还限制站点可以在用户计算机上存储的Cookie的数量,大多数浏览器只允许每个站点存储20个Cookie,如果试图存储更多Cookie,则最旧的Cookie便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的Cookie总数作出绝对限制,通常为300个。

2.2 Cookie的技术实现

2.2.1 网站如何设置Cookie(写操作)

(1)当你在浏览器中点某个书签或者在浏览器地址栏输入某个网址,浏览器会向对应的网站发起一个HTTP请求(术语是HTTP Request)。

(2)然后,网站的服务器收到这个HTTP请求之后,会把相应的内容(比如网页、图片等)发回给浏览器(这称为HTTP响应,术语是HTTP Reponse)。如果网站想设置Cookie,就在发回的HTTP Response中,包含一个设置Cookie的指令。举例如下:

Set-Cookie∶ user=xxxx; Path=/; Domain= www.example.com

上述这个例子中,设置了一个Cookie。这个Cookie的“名”是user;Cookie的“值”是xxxx;Cookie绑定的域名是www.example.com

(3)浏览器在收到这个指令后,就会在你的电脑中存储该Cookie的信息。

2.2.2 网站如何获取Cookie(读操作)

假设过了几天之后,你再次访问上述的www. example.com网站(在上次的访问中,已经被设置过Cookie了)。这时候,浏览器发现该网址已经有对应的Cookie,就会把Cookie的信息放在HTTP Request中,然后发送到网站服务器。具体的指令如下:

Cookie∶ user=xxxx

网站服务器拿到这个HTTP Request之后,就可以通过上述信息,知道Cookie的“名”和“值”。

2.3 Cookie的特点

2.3.1 存储信息量小

Cookie在英文中的意思就是:小甜饼。这个单词其实已经暗示了Cookie技术所能存储的信息量是比较小。

比如某个网站上有很多网页,每个网页上有很多广告。该网站想要收集每一个访客点击了哪些广告。由于这些信息量比较大,直接存储在Cookie里可能放不下。所以,网站通常是在Cookie中保存一个惟一的用户标识,然后把用户的点击信息(包括在哪个时间点击哪个广告)都存储在服务器上。下次你再访问该网站,网站先拿到Cookie中的用户标识,因为这个标识具有惟一性,那么就可以根据该标识,从网站服务器上查出该用户的详细信息。

2.3.2 绑定到域名和路径

从上述的实现机制可以看出,Cookie是跟HTTP Request对应的网址(域名和路径)相关的。所以,不同域名的网站设置的Cookie是互相独立的(隔离的),这一点由浏览器来保证,以确保安全性。

2.4 Cookie有何正经用途

Cookie之所以应用这么广泛,因为它本身确实是很有用的。目前,很多基于Web的邮箱,都有自动登录功能。也就是说,你第一次打开邮箱页面的时候,需要输入用户名和口令,过几天之后再来打开邮箱网页,就不需要再次输入用户名和口令了。为什么邮箱可以做到自动登录,就是因为邮箱的网站在你的浏览器中保存了Cookie,通过Cookie中记录的信息来表明你是已登录用户。

它还能提高个性化页面。比如某个论坛允许匿名用户设置页面的字体样式和字体大小,那么,该论坛就可以把匿名用户设置的字体信息保存在Cookie中,下次你用同一个浏览器访问该论坛,自动就帮你把字体设置好了。

3 Cookie的安全问题

在Web应用中,Cookie很容易成为安全问题的一部分。从以往的经验来看,对Cookie在开发过程中的使用,很多开发团队并没有形成共识或者一定的规范,这也使得很多应用中的Cookie成为潜在的易受攻击点。在给Web应用做安全架构评审的时候,通常需要认真考虑以下几个问题:

应用中有使用JavaScript来操作客户端Cookie吗?如果有,那么是否必须使用JavaScript才能完成此应用场景?如果没有,你的Cookie允许JavaScript来访问吗?你的网站(可能包含多个Web应用)中,对于Cookie的域(Domain)和路径(Path)设置是如何制定策略的?为何这样划分?在有SSL的应用中,你的Cookie是否可以在HTTP请求和HTTPS请求中通用?

在实际的应用场景中,Cookie被用来做得最多的一件事是保持身份认证的服务端状态。这种保持可能是基于会话(Session)的,也有可能是持久性的。不管哪一种,身份认证Cookie中包含的服务端票据(Ticket)一旦泄露,那么服务端将很难区分带有此票据的用户请求是来自于真实的用户,或者是来自恶意的攻击者。在实际案例中,造成Cookie泄露最多的途径,是通过跨站脚本(XSS, Cross Site Script)漏洞。攻击者可以通过一小段JavaScript代码,偷窃到代表用户身份的重要的Cookie标示。由于跨站脚本漏洞是如此的普遍,几乎每一个网站都无法避免,这种方式是被普遍使用的一种手段。

4 Cookie的安全解决方案

避免出现Cookie隐私问题的首要秘诀就是尽所有的可能,给你的Cookie加上HttpOnly的标签。HttpOnly是由微软在2000年IE6 Sp1中率先发明并予以支持的,截至目前,HttpOnly仍然只是一个厂商标准,但是在过去的10余年中,它得到了众多浏览器的广泛支持。

事实上,一个Web应用的每一个Cookie都应该带上HttpOnly的标签。笔者没有看到这个决定可能带来的负面作用,如果一定要说有的话,那么就是你的应用将不能再通过JavaScript来读写Cookie了。可是这真有必要吗?笔者认为,JavaScript操作Cookie是一种不正常的做法;可以用JavaScript操作Cookie完成的功能,一样可以用服务端响应Http头设置Cookie来完成。相反,设置所有的Cookie为HttpOnly带来的巨大好处则非常明显:尽管你需要继续修复XSS漏洞,但是这些漏洞至少暂时不会让你的用户遭受大规模的账户损失。

关于Cookie的域设置。浏览器在选择发送哪些本地Cookie到本次请求的服务端时,有一系列的比较和甄别。这些甄别中最重要的部分是Domain和Path的吻合。Domain形如.abc.com的Cookie,会被发送给所有abc.com在80端口上的子域请求。但是反之则不行,这就是Cookie的域匹配(domain match)原则。

在一个大型Web站点中,往往有多个应用,生存在不同的子域名或路径下。这些应用之间由于共享同一个域名,所以往往可能会彼此有操作对方应用Cookie的能力。这种情况下,设计好Cookie的Domain和Path尤为重要。在实际设计工作中,最重要的一个安全原则就是:最小化授权。这意味着,你需要将自己的Cookie可被访问到的范围降至最低。应用之间传递数据和共享信息的解决方案非常多,而通过Cookie这种用户输入(User input)来共享数据,是最不安全的解决方案之一。

Cookie另外一个不常被使用的属性是Secure.这个属性启用时,浏览器仅仅会在HTTPS请求中向服务端发送Cookie内容。如果你的应用中有一处非常敏感的业务,比如登录或者付款,需要使用HTTPS来保证内容的传输安全;而在用户成功获得授权之后,获得的客户端身份Cookie如果没有设置为Secure,那么很有可能会被非HTTPS页面中拿到,从而造成重要的身份泄露。所以,在你的Web站点中,如果使用了SSL,那么你需要仔细检查在SSL的请求中返回的Cookie值,是否指定了Secure属性。

还需特别指出的是,一些Web应用除了自己的程序代码中生成的Cookie,往往还会从其他途径生成一些Cookie。例如,由Web Server或者应用容器自动生成的会话Cookie,由第三方库或者框架生成的Cookie,等等。这些都需要进行有针对性的加固处理。

几乎每个站点都难以离开Cookie,但Cookie的使用因其貌似简单,而很容易被人忽视。重新审视应用中的Cookie代码,几乎只需要很小的代价就可以获得巨大的安全收益。

5 不只是技术问题

现在是互联网大数据的时代,包括BAT(Baidu,Alibaba,Tencent)在内的大部分互联网公司,都会在用户不知情的情况下做着用户数据采集和挖掘工作,目前这块没有立法和监督。国外的IT巨头(如Google,Facebook)也是拼命在国会游说,推迟或者否决这方面的立法,典型的就是发动舆论和网民来组织SOPA和PIPA。

Cookie本身是一个用户离不开的一个最基础的规范、互联网服务和工具。Cookie本身是无罪的,Cookie本身也没有任何问题,有问题的是用Cookie来做事情的人和企业,就是你用它来做什么。如果你用它来提供注册用户所需要的个性化的服务,那是毫无疑问,这是必需的。但是,如果以Cookie为基础,去采集用户的浏览信息、浏览行为、兴趣偏好、个人信息,包括甚至一些隐秘的个人隐私等,如果在用户知情并许可(哪怕默许)的情况下采集之后,如果只是自己作为优化自身服务,为用户提供更好的服务,包括一定范围内的精准广告,也没有问题。但是,如果把它未经用户许可去转让给第三方,或者让第三方以Cookie为基础来采集用户的浏览行为和资讯信息等,那就有问题了。

关于Cookie的边界和有问题的范围其实是很清楚的,也就是一个最基本的原则,第一是知情权,第二是选择权,第三是许可权。

知情权就是采集用户隐私、浏览行为的信息,用户必须是要知情的,不是偷偷采集;选择权就是用户在接受服务的过程中可以选择,比如说开放这个权利,也可以选择不开放这个权利,这个开关在用户手里,不是企业手里,不能强迫用户;许可权是指利用客户的Cookie信息转让给第三方,包括把侵犯用户个人隐私的数据做转售,必须经用户个人许可。

用户本身有知情权、选择权、许可权,用户的这三项权利都被剥夺了,明显就是对用户个人信息的侵犯,利用Cookie或者利用其他信息出售给第三方,比如现在有很多联盟广告给小网站,就是对用户隐私权的侵犯。

6 结束语

全球已经进入大数据时代,这个时代就是要精准地抓取某一方面、某一领域、某一个体所有的动向。客观地讲,从目前来看,中国整个社会的信任体制都没有建立起来,Cookie在中国的被滥用就是很典型的一个例子。随着互联网的发展,隐私不可避免地变得越来越少,开放步伐是抵挡不住的,在整个社会道德体制没有建立健全的时候,互联网行业需要自我约束。我们要做的是尽量让潭水变得清澈。

[1] 方霞.Cookie安全与用户隐私研究.科技通报,2013.08.15

[2] 吕芹.Cookie∶技术无罪.互联网周刊,2014.04.05.

[3] 沧海.Cookies可爱的洪水猛兽.电脑爱好者,2013.04.15

[4] 李馥娟.基于Cookies的Web应用分析及其安全研究.网络安全技术与应用,2009.06

Cookies Inside Out

Lv Junhong, Zhou Jiangfeng
(department of finance of Hebei province, Shijiazhuang, 050051)

In the history of Web technology, the emergence of Cookies technology is a major change. However, the Cookie technology is a very controversial technique. Since it was born, became a controversial focus for the majority of Internet users and web developers, not for Cookie functions are too weak, but that Cookie use information of privacy of network users constitute a hazard.

network security; Cookie; privacy; Big Data; Advertising harassment

10.3969/J.ISSN.1672-7274.2015.06.011

TP393文献标示码:A

1672-7274(2015)06-0062-04

猜你喜欢
服务端浏览器站点
基于Web站点的SQL注入分析与防范
电子制作(2019年14期)2019-08-20 05:43:42
反浏览器指纹追踪
电子制作(2019年10期)2019-06-17 11:45:14
2017~2018年冬季西北地区某站点流感流行特征分析
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
消费导刊(2018年8期)2018-05-25 13:19:48
在Windows Server 2008上创建应用
首届欧洲自行车共享站点协商会召开
中国自行车(2017年1期)2017-04-16 02:53:52
怕被人认出
故事会(2016年21期)2016-11-10 21:15:15
环球浏览器
环境与生活(2016年6期)2016-02-27 13:46:37
再见,那些年我们嘲笑过的IE浏览器
英语学习(2015年6期)2016-01-30 00:37:23