在浏览器中加密Cookie
在网络应用中,cookie是一种非常方便的存储数据的方法。正因如此,你在开发WEB应用的时候更需要注意cookie的安全性。有很多办法可以做到保证cookie的安全,这里我们再讨论一种-浏览器端的cookie加密。
对cookie的攻击
cookie是存储在客户端的,通常是一段文本。如果电脑是多人使用的,那么其他人就能够看到你的cookie信息,并且保存下来那个长期会话的ID,就可以伪造你的身份了。
Cookie经常是服务器端通过HTTP头部的’Set-Cookie’来设置,然后发送到客户端。这样就有可能被嗅探到。你可以使用SSL/TLS来加密网络包来防止嗅探,但是很多网站,包括Facebook也只是在登录界面使用HTTPS链接,然后就会切换到HTTP链接。像FireSheep这样的工具用来嗅探和劫持cookie是轻而易举的。
还有另外一种常见的攻击,跨站脚本攻击(XSS漏洞)当一些程序(一般是Javascript)被植入进入网页程序,然后在用户不知道的情况下执行。当Javascript在这种环境中执行的时候,就可以读取到用户的cookie信息。这种情况是很难防御的,当用户访问他们的网站的时候,用户完全在这网站的控制之下。你只能期望Y网站又足够的安全防御来防止XSS攻击。能完全杜绝这种攻击的办法只能是你关闭Javascript脚本执行。
浏览器端Cookie加密
CompletelyPrivateFiles.com提供了网络加密的解决方案。作为他们基础设施的一部分,他们建立了一个Javascript的API,可以对cookie进行256位的AES加密。这个API是免费的,可以在这里下载。
这个API通过分配一个随机动态的seed-key给用户或程序来产生一个强大的256位的密钥。然后在客户端通过这个密钥来加解密cookie,这是一个设计非常小巧的API,可以很容易整合进入已有的程序中。
你需要一个API账户,以便在程序中从服务器取得seed-key。在注册之后会得到一个sub-token,然后添加对应的js库就可以开始了。
然后当你需要设置安全cookie的时候,只要使用
setSecureCookie(secret, cookieName, cookieVal);
其中secret是你需要设置的密钥,可以是用户名、时间戳等等。
读取cookie的时候:
var cookieVal = getSecureCookie(secret, cookieName);
这里的secret必须和之前设置时候的secret值一样。
Cookie的安全
考虑到本文开头所说的,在每种情况下,攻击者只是为了能取到cookie的值,我们将这个值加密之后,他取到的值也就没有什么意义了。
万一有些人有访问本地资源的权限,可以扫描cookie内容,那么他看到的也只是乱码,没有什么意义。
或者说你将加密后的cookie通过表单再发送到服务器,然后服务端通过’Set-Cookie’的请求来发挥客户端设置cookie,那么在传输过程中也是加密后的内容,计算通过HTTP传输也没有安全问题。
XSS的攻击很难防御,因为攻击者对网页有完全的控制权,如果攻击不是很具体,那么可能只是读取一些内存中的变量,或者根据XSS漏洞读取你的cookie,但是想要获得有价值的cookie信息,必须先过解密者一关。
需要注意的是,加密并不能组织恶意用户损坏你的cookie值,是程序无法解密。但这并不会损坏cookie的价值。
用户隐私
除了提高安全性,你还可以通过加密的cookie来保护用户的隐私。随着越来越多的用户数据保存在云端,以及有关隐私的问题越来越突出,你或许希望保证用户的信息只能被他们自己看到。
这个问题的解决办法再用户登录之后,通过加密的cookie来存储一些敏感的信息。cookie有个过期的问题。可以通过把cookie加密后存储在服务器端,然后使用‘set-cookie’头,这样就可以了,这样甚至可以做到无限期的保存。
一个例子就是在线支付,交易是存储在网络的,但是实际的银行账户信息是通过加密的cookie来访问的。将cookie存储在服务端,然后在本地解密,银行信息就可以在程序的上下文中进行,但是也保证了用户的隐私。
总结
客户端的cookie加密对于提高网络应用的安全性是显而易见的。对于你的程序的安全性设计提供了另一个思路。他不仅仅是一个安全工具,也是一个隐私保护工具,这在现在的网络编程中是非常重要的。
建议继续学习:
- cookie窃取和session劫持 (阅读:12868)
- curl 命令使用cookie (阅读:8745)
- 网址加密(URL加密)(RC4、PHP、密钥长度可变) (阅读:6885)
- 前端开发中Cookie那些事儿 (阅读:6145)
- 如何设置一个永远无法删除的Cookie (阅读:5199)
- 代理的加密部分 (阅读:4492)
- 使用bcompiler对PHP文件进行加密 (阅读:4316)
- 网站统计:第一方Cookie和第三方Cookie (阅读:4094)
- 使用系统命令实现文件的压缩与加密 (阅读:4002)
- 公钥私钥加密解密数字证书数字签名详解 (阅读:3978)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:北玉 来源: RockUX | WEB、前端、JavaScript、PHP
- 标签: Cookie 加密
- 发布时间:2011-06-02 23:44:09
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成