Cookie使用和安全
来源:互联网 发布:上海php培训哪家好 编辑:程序博客网 时间:2024/05/22 00:48
Cookie简介
Cookie分为“Persistent”和“Non-Persistent”类型。 “Persistent”Cookie在浏览器关闭后,Cookie会保存在硬盘上;”Non-Persistent” Cookie只是存在内存中,当浏览器关闭时,Cookie消失。
浏览器通常都提供管理Cookie的功能。
Cookie内容
一条Cookie通常由多个“属性=值”格式的元素组成。例如下面是用户登录Gmail时产生的一条Cookie
SetCookie: GV=; Domain=mail.google.com; Expires=Sun, 09Oct05 13:47:42 GMT; Path=/mail
如上例子,一条Cookie通常有5条参数:
l Cookie的名称 (GV)
l Cookie的值 (空白)
l Cookie的有效期 (Sun, 09Oct05 13:47:42 GMT)
l Cookie有效的域名 (mail.google.com)
l Cookie有效的路径 (/mail)
除了以上5个参数外,还有其他一些参数,例如为了安全行,可以加上secure和HttpOnly。
Cookie的安全风险
下面列举一些例子,说明了使用cookie可能带来的安全隐患,以及消除这些隐患的方法。
1. 域名使用不当
从上面的Cookie例子中可以看到,每条Cookie有一个域名,限定Cookie生效的范围。例如mail.google.com,这样这条cookie只能在这个域名上生效,如果是google.com,就不能生效了,但是在子域名内,例如pop3.mail.google.com, 应该还是生效。但是如果有人把cookie域名写成了.com或者.edu或者.net等,这样这个cookie对大量的网域都有效。为此有标准“RFC 2965”[描述http状态管理的文档]专门规定,默认下,对这样只包含根域名的cookie一概禁止。
尽管如此,风险依然存在,例如一个网站www.abcfootball.com,登录后cookie的域名应该是public.abcfootball.com,但是如果设置成了abcfootball.com,那么意味着cookie对public.abcfootball.com,private.abcfootball.com,以及一切子域都有效,这样这条cookie可能会让用户访问到权限限定反问之外的资源。
避免的方法很简单,就是把cookie的域名限定尽量设置准确,详细。
2. 路径使用不当
这个和“域名使用不当”类似,当cookie的限定访问路径设置过大时候,意味着cookie对所有子目录都是有效的,会带来非法访问的可能。例如刚才例子中路径“/mail”设置成了根目录“/”,用户有可能用这条cookie访问到除“/mail”之外的资源.
3. “Persistent” Cookie保存登录信息
许多网站在登录时使用类似于“记住登录信息”的功能。这样用户登录的信息【例如用户名,密码】会以“Persistent”Cookie的形式保存在硬盘上,例如登录Gmail时候,保存的cookie可能是:
SetCookie: rememberme=true;Domain=.google.com;Path=/;Expires=Thu, 21Apr2016 12:03:07 GMT
这样用户在cookie过期之前再登录google.com,网页会直接进入gmail的inbox页面. 这样产生的巨大风险是,当其他用户使用此机器时,一样就自动进入你的邮箱了。
避免的方法是,当使用完邮箱后,应使用“登出”而不是直接关掉浏览器。开发者处理敏感信息登录时,尽量采用Session机制,SessionID 默认使用“Non Persistent”Cookie保存,当“登出”或关闭浏览器时,就会自动从内存中消失。
4. “Persistent” Cookie保存敏感信息
和上面一样,当用户输入敏感信息进行业务后,这些信息会保存在机器本地,例如网上购物,用户的信用卡信息会保留在磁盘上。
避免这种风险的方法是,尽量少用公共机进行这样业务;或者在业务完成后,使用浏览器的安全管理工具,删除掉所有的Cookie。
5. 明文传输Cookie
Cookie经常用来存储一些敏感信息,例如session id,如果明文在网上传输,传输过程中很可能被窃取。为了保证cookie不被窃取,需要在cookie中加上“Secure”的属性,这样浏览器也能意识到这是敏感信息,会以不同的security level来对待;会提醒用户,建议以SSL方式来连接,在cookie返回Server时,也以不同的安全级别来传输。
6. 缓存中的Cookie
现在缓存被大量应用,以提高网站访问性能。如果包含个人敏感信息的Cookie被存储在缓存上,很可能造成这些信息泄漏。
为避免这种情况,在Response的Header中加上去除缓存的属性:
Cachecontrol: nocache="setcookie"
或者
Cachecontrol: nocache="setcookie2"
一些私有页面同样也不应该被缓存,应该在Header中加上:
Cachecontrol: private
7. 跨域脚本攻击(CSS: Cross Site Scripting Attack)
CSS是最普遍的网络攻击手段之一。通过一段恶意的脚本代码,偷取用户本地有效的Cookie,然后发送给恶意攻击者,这些信息可能被非法应用。
网上防范的方法有很多,这里介绍一种方式,给Cookie加上HttpOnly的属性:
SetCookie: USER=123; expires=Wednesday, 20Apr06 23:12:40 GMT; HttpOnly
“HttpOnly”属性能保证这条Cookie不能被脚本语言执行获取到,而被发送到第三方。这样能保证这条Cookie的安全。
- Cookie使用和安全
- 关于cookie 和 session的安全使用
- tornado cookie 和cookie安全
- 设置session和cookie的类,安全。
- session和cookie的使用及其区别(cookie是在用户浏览器上,而session是在服务器上的,一般cookie不是很安全)
- Cookie安全
- cookie、安全
- cookie安全
- Cookie创建和使用
- 关于Cookie的使用---web Cookie和js Cookie
- 使用Cookie和用户会话
- SESSION和COOKIE的使用
- Rails Cookie和session使用
- Session和Cookie的使用
- cookie的创建和使用
- cookie和session的使用
- cookie session区别和使用
- Cookie的使用和细节
- PHP导出Excel长数字末尾几位数为0的问题
- C# spring IOC测试
- 【scikit-learn】用Python进行机器学习实验
- Genymotion启动不了?——绝对零度试验机
- 【C 实现】返回子串在主串的首位
- Cookie使用和安全
- css中选择器
- dict()的操作方法
- *(leetcode_string) Length of Last Word
- 调接口发送短信 :用file_get_contents函数,以post方式获取url
- CSS魔法堂:盒子模型简介
- QT 线程间QThread的信号和槽
- 安卓 Android SDK 下载 r23.0.2
- 内存分配