利用HTTP-only Cookie缓解XSS之痛

在Web安全领域,跨站脚本攻击时最为常见的一种攻击形式,也是长久以来的一个老大难问题,而本文将向读者介绍的是一种用以缓解这种压力的技术,即HTTP-only cookie。

我们首先对HTTP-only cookie和跨站脚本攻击做了简单的解释,然后详细说明了如何利用HTTP-only cookie来保护敏感数据,最后介绍了实现HTTP-only cookie时确定浏览器版本的具体问题。

一、XSS与HTTP-only Cookie简介

跨站点脚本攻击是困扰Web服务器安全的常见问题之一。跨站点脚本攻击是一种服务器端的安全漏洞,常见于当把用户的输入作为HTML提交时,服务器 端没有进行适当的过滤所致。跨站点脚本攻击可能引起泄漏Web 站点用户的敏感信息。为了降低跨站点脚本攻击的风险,微软公司的Internet Explorer 6 SP1引入了一项新的特性。

这个特性是为Cookie提供了一个新属性,用以阻止客户端脚本访问Cookie。

像这样具有该属性的cookie被称为HTTP-only cookie。包含在HTTP-only cookie中的任何信息暴露给黑客或者恶意网站的几率将会大大降低。下面是设置HTTP-only cookie的一个报头的示例:

Set-Cookie: USER=123; expires=Wednesday, 09-Nov-99 23:12:40 GMT; HttpOnly

上面我们介绍了HTTP-only Cookie;下面我们开始向读者介绍跨站点脚本攻击、允许通过脚本访问的cookie所带来的潜在危险以及如何通过HTTP-only来降低跨站点脚本攻击的风险。

跨站点脚本攻击是一种服务器端常见的安全漏洞,它使得黑客可以欺骗用户从而导致用户在某个Web 站点上的敏感信息的泄漏。下面通过一个简单的示例来解释一个跨站点脚本攻击的相关步骤。

二、跨站点脚本攻击示例

为了解释跨站点脚本攻击是如何被黑客利用的,我们假想了下面的一个例子:

A证券公司运行了一个Web 站点,该站点允许您跟踪某股票的最新价格。为了提高用户体验,登录A证券公司的Web 站点之后,你将被重定向到www.azhengquan.com/default.asp?name = < script > evilScript()< / script >张三,并且有一个服务器端脚本生成一个欢迎页面,内容为“欢迎您回来,张三!”。

你的股票数据被存放在一个数据库中,并且Web 站点会在你的计算机上放置一个cookie,其中包含了对这个数据库非常重要的数据。每当你访问A证券公司站点时,浏览器都会自动发送该cookie。

一个黑客发现A证券公司公司的Web 站点存在一个跨站点脚本攻击缺陷,所以他决定要利用这点来收集你所持股票的名称等敏感信息。黑客会您你发送一封电子邮件,声称您中奖了,并且需要点击某个链接如“点击这里”来领取奖品。注意,该链接将超链接到www.azhengquan.com/default.asp?name=< script >evilScript()< / script > 当您点击这个链接,映入眼帘您的将是“欢迎您回来!”—— 等等,您的姓名哪里去了?事实上,单击电子邮件内的链接之后,你实际上就是在通知A证券公司公司的Web 站点,你的姓名是< script  > evilScript()<  /script >。Web服务器把用这个“名字”生成的HTML返回给你,但是你的浏览器会把这个“名字”作为脚本代码解释,脚本执行后便出现了我们前面看到的一 幕。一般情况下,支持客户端脚本是浏览器的典型功能之一。如果这个脚本命令浏览器向黑客的计算机发回一个cookie,即使这个cookie包含有您的股 票的有关信息,您的浏览器也会老老实实地执行。最后,那些来自A证券公司的Web 站点的指令获取了那个包含敏感信息的cookie。

下面是跨站脚本攻击的示意图,它详细的展示了攻击的五个步骤。首先,用户点击了黑客发来的电子邮件中的一个嵌入的链接(第1步)。由于跨站点脚本攻 击缺陷的原因,这样会导致用户的浏览器向Web 站点发送一个请求(第2步);服务器端根据该请求会生成一个包含恶意脚本的响应,并将其发回给用户的浏览器(第3步)。当用户的机器执行返回的恶意代码时 (第4步),就会将用户的敏感数据发送给黑客的计算机(第5步)。

我们可以看到,这个过程只需要用户单击了一个链接,然后就会有指令发送给Web服务器,然后Web服务器生成一个嵌入恶意脚本的网页;浏览器运行这个来自受信任的源的脚本,却致使信息泄漏给黑客的计算机。跨站点脚本攻击有许多不同的形式,这里只是其中的一种。

三、用HTTP-only Cookie保护数据

为了缓解跨站点脚本攻击带来的信息泄露风险,Internet Explorer 6 SP1为Cookie引入了一个新属性。这个属性规定,不许通过脚本访问cookie。使用HTTP-only Cookie后,Web 站点就能排除cookie中的敏感信息被发送给黑客的计算机或者使用脚本的Web站点的可能性。

Cookie通常是作为HTTP 应答头发送给客户端的,下面的例子展示了相应的语法(注意,HttpOnly属性对大小写不敏感):

Set-Cookie: =[; =]
[; expires=][; domain=]
[; path=][; secure][; HttpOnly]

即使应答头中含有HttpOnly属性,当用户浏览有效域中的站点时,这个cookie仍会被自动发送。但是,却不能够在Internet
Explorer 6 SP1中使用脚本来访问该cookie,即使起初建立该cookie的那个Web
站点也不例外。这意味着,即使存在跨站点脚本攻击缺陷,并且用户被骗点击了利用该漏洞的链接,Internet
Explorer也不会将该cookie发送给任何第三方。这样的话,就保证了信息的安全。
注意,为了降低跨站点脚本攻击带来的损害,通常需要将HTTP-only Cookie和其他技术组合使用。如果单独使用的话,它无法全面抵御跨站点脚本攻击。

四、支持HTTP-only Cookie的浏览器

如果Web 站点为不支持HTTP-only Cookie的浏览器建立了一个HTTP-only cookie的话,那么该cookie不是被忽略就是被降级为普通的可以通过脚本访问的cookie。这还是会导致信息容易被泄露。

对于公司内部网中的web页面,管理员可以要求所有用户都是由支持HTTP-only Cookie的浏览器,这样能保证信息不会由于跨站点脚本攻击缺陷而泄露。

对于公共Web 站点,由于需要支持各种各样的浏览器,这时可以考虑使用客户端脚本来确定不同访问者所使用的浏览器的版本。Web
站点可以通过向支持~的浏览器发送敏感信息以减轻跨站点脚本攻击对Cookie的威胁。对于那些使用不支持HTTP-only
Cookie的浏览器的访问者,可以限制为其提供的信息或功能,并要求升级他们的软件。

当确定Internet Explorer的版本时,重要的是记住Internet Explorer 6 SP1
的用户代理字符串跟Internet Explorer
6的用户代理字符串是一样的。客户端脚本还必须使用navigator对象的appMinorVersion属性检测主版本号,这样才能确定出客户端是否
安装了Internet Explorer 6 SP1。

五、小结

在Web安全领域,跨站脚本攻击时最为常见的一种攻击形式,也是长久以来的一个老大难问题,而本文将向读者介绍一种用以缓解这种压力的技术,即
HTTP-only cookie。我们首先对HTTP-only
cookie和跨站脚本攻击做了简单的解释,然后详细说明了如何利用HTTP-only cookie来保护敏感数据,最后介绍了实现HTTP-only
cookie时确定浏览器版本的具体问题。



1.什么是HttpOnly?

如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击

具体一点的介绍请google进行搜索


2.javaEE的API是否支持?

目前sun公司还没有公布相关的API,但PHP、C#均有实现。搞javaEE的兄弟们比较郁闷了,别急下文有变通实现

3.HttpOnly的设置样例

javaEE

response.setHeader("Set-Cookie", "cookiename=value;
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

具体参数的含义再次不做阐述,设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取

Cookie cookies[]=request.getCookies();

C#

HttpCookie myCookie = new HttpCookie("myCookie");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);

PHP4

header("Set-Cookie: hidden=value; httpOnly");

PHP5

setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
时间: 2024-08-29 12:50:19

利用HTTP-only Cookie缓解XSS之痛的相关文章

pikachu练习平台(XSS-漏洞测试案例(cookie的窃取和利用、钓鱼攻击、XSS获取键盘记录))

XSS-漏洞测试案例 xss案例 1.cookie的窃取和利用 2.钓鱼攻击 3.XSS获取键盘记录 在进行案例之前首先要搭建xss后台 搭建xss后台 1.在pikachu文件夹下面,把pkxss单独放在www下面: 2.修改配置文件  数据库服务器地址,账号,密码: 3.登录: 4.安装: 5.修改,重定向到一个可信的网站(令点击者不知情): 后台登陆成功: 一. get型xss cookie值获取 首先修改字符输入长度: 输入框输入 <script>document.location='

利用窗口引用漏洞和XSS漏洞实现浏览器劫持

==Ph4nt0m Security Team==                        Issue 0x03, Phile #0x05 of 0x07 |=---------------------------------------------------------------------------=||=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=||=---------------------------

destoon系统开发-最新利用浏览器的cookie 做历史浏览记录

  注意: 代码 放在要显示的为 (一般放在详情页),注意本教程不入库,直接利用浏览器的 cookie 缓存判断    <!--历史浏览记录 S--> <div class="column_box mt_10"> <div class="column_title">历史浏览记录</div> <div class="box_body_new"> <?php $MOD_name = &

漏洞利用:验证绕过,XSS利用,Cookic盗用,文件上传

1.      文件上传 低级别 写好上传的内容 选择好上传的文件 上传成功. 测试:访问文件,执行代码 中级别 修改文件后缀为png 上传该文件 抓包修改文件后缀为php,然后允许数据包通过. 上传成功 测试:访问文件,执行代码 2.      验证码绕过 首先将秘钥添加到配置文件 低级别 step值1,有验证,step值2,无验证,所以将数据包step值修改为2,然后发送即可绕过. 中级别 将数据包step值修改为2,并添加passed_captch=true,然后发送即可绕过. 3.   

利用session+application+cookie 实现单态登陆,且解决浏览器意外关闭的问题

最近在帮朋友做一个购物网站,里面涉及到了登陆的问题.其中包括后台管理员的登陆和用户的登陆. 在这个网站中,设计了后台管理员单态登陆,即一个账号只能有一个登陆实例.很容易想到的就是用application实现,在application中放置一个hashmap,储存登陆的管理员信息.同时为了实现登陆超时,也在session中存放登陆对象,通过设置session的listener监控session的消亡,移除application中的对象.那么问题来了,如果用户因为断电或者任性,非法关闭了浏览器,再打

利用 Data URI Scheme进行XSS

这种方法不算新,可是很少人用,也很少人能想得到. data:类似于javascript.:,在很大程度上,可以完成javascript的工作. 举一个例子: 进行XSS测试时,发现javascript与script等关键字都被过滤了(现在一般有点XSS意识的管理员都懂得过滤这两个关键字).可用下面的语句: data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4= 这语句和  javascript.:alert("xss"

web安全相关知识

xss攻击入门 XSS攻击及防御 XSS的原理分析与解剖 浅谈CSRF攻击方式 利用HTTP-only Cookie缓解XSS之痛 SERVLET 2.5为COOKIE配置HTTPONLY属性 cookie工具类,解决servlet3.0以前不能添加httpOnly属性的问题 web安全实战系列文章

XSS的高级利用部分总结 -蠕虫

XSS的高级利用部分总结 -蠕虫,HTTP-only,AJAX本地文件操作,镜象网页本帖最后由 racle 于 2009-5-30 09:19 编辑 XSS的高级利用总结 -蠕虫,HTTPONLY,AJAX本地文件操作,镜象网页By [email protected]    http://bbs.tian6.com/thread-12711-1-1.html转帖请保留版权 -------------------------------------------前言-----------------

xss漏洞利用

一.跨站获取cookie 1,hacker端(hacker.php)的程序如下: <?php$cookie=$_GET['cookie'];$file=fopen("cookie.txt","a");fwrite($file,$cookie);fclose($file)?> 2,受害者端(victim.php)的程序如下:<html><head><title>xss跨站原理复现</title></he