`

跨站点请求伪造漏洞(转自javaeye)

 
阅读更多
项目用appscan探测出的安全问题,以前没有接触过这方面的知识,在javaeye上看到一篇还不错的文章。

在不追求成功率的情况下,跨站点请求伪造的攻击成本相对较低,门槛儿也不高,有点姜太公钓鱼,愿者上钩的味道。实际上,JE就从一定程度上存在此漏洞,不过根据我的实验结果,JE已经从很大程度上防范了此攻击,所以风险不大。下面我来讲解一下如何利用JE的此漏洞干点儿坏事。
鉴于这里都是Ajax高手,以下说明中尽量避免出现代码,只说原理。有兴趣的话自己动手一试便知。
攻击目标:让被攻击者A在自己不知情的情况下给B发送若干条站内短信。
步骤:
    1. 确定JE发送站内短信的http请求地址,参数等。你自己可以随便给一个好友发送一条站内短信,同时使用httpwatch或firebug记录请求内容即可。
2. 发布一个有诱惑性的网页,上面写些技术文章或者别的能吸引A的东西。最重要的是,要有一个指向JE的超链接。
3. 在上述网页中跑一段JS代码,这段代码循环调用第1步中你记录的地址以及包含你自己构造的短信内容的请求参数。注意,请求要用post方式发送,因为JE已经在发端信的请求处理上禁用了get方式。
至此,大功告成,剩下的就是等着A登录JE。一旦他登录,你的JS代码就可以发起攻击了。B下次上线后会收到A发送的若干条站内短信,而短信内容完全由你决定。
以上就是跨站点请求伪造的基本思路。
真的这么简单吗?当然不是,以上攻击需要至少两个条件才能成功。首先,A要使用IE6这种经过他自己确认就可以跨站点发送请求的浏览器(所谓愿者上钩),而FF和chrome都不允许。其次,A打开JE后没有关闭你的页面,这就要看你的造化了。
其实正是因为JE禁止了get请求,才使得这个攻击的成功率大打折扣。如果其他被攻击的站点允许发送get请求,那么我们就可以大大地强化攻击。那就是跨域的利器img和script。只要给这两个html元素的src赋值,它们便会自动发起跨域请求,而且浏览器不会给出任何安全提示。设想一个极其粗糙的银行网站如果具备被攻击的条件的话将会是什么后果?你完全不需要知道客户的卡号和密码就可以把他的钱轻松转帐了。实际上早期的gmail就存在这样的漏洞,攻击者可以轻松搞到被攻击者的联系人列表。
如何防范呢?目前我了解的有两种思路。
方案一:每个请求都带上一个由服务器生成的随机参数。然后在服务器端和对该参数,如果和下发的随机数不同,则可以认为有人在伪造请求。因为攻击者无法知道他本次攻击的http请求需要带什么样的随机数才是有效的。
方案二:跨域伪造之所以能成功,主要决定因素是攻击者的页面和稍候被打开的目标页面共享session信息。受害者登录后,攻击者的页面通过ajax向被攻击网站的关键业务发起的请求便自动带上了合法的session信息。但是,根据javascript的同源策略可知,挂有A域名的窗口,不能获取挂有B域名窗口中的任何信息,不管B是如何被打开的。据此,我们有了另一套防范策略。在客户端的每个要保护的业务链接上增加一个参数sessionId,这个参数可以通过js从cookie中获得。然后,在务器端获取此参数,并同真正的sessionId做对比,如果不同,则认为请求是伪造的。因为攻击者的窗口无法从被攻击网站的窗口中取得这个sessionId。据说很多ajax框架都已经自带了此功能。
分享到:
评论

相关推荐

    javaeye被黑

    javaeye被黑 大家看看

    javaEye客户端

    JavaEye客户端可能包含有关如何使用Java的Thread类或ExecutorService来执行并发请求的示例。 六、调试与日志记录 为了方便调试和问题排查,JavaEye客户端可能会集成Log4j或其他日志框架,以记录程序运行时的关键...

    javaeye热点阅读

    JavaEye热点阅读是JavaEye论坛推出的2009年2月特辑,旨在为Java学习者和开发者提供最新的知识及行业动态。这份资料包含了多个Java相关的主题,包括但不限于并发编程、开源项目、设计模式、框架应用以及软件开发实践...

    JavaEye+技术架构

    JavaEye+技术架构,讲述java框架的应用

    javaeye的信息提示框代码之js

    javaeye的信息提示框代码之css,application.js

    httpClient调用javaeye API验证用户

    4. **添加请求头**:如果JavaEye API需要特定的认证信息,如API密钥,可以通过`setHeader`方法添加到请求头中: ```java httpGet.setHeader("Authorization", "your_api_key"); ``` 5. **执行请求**:使用...

    JavaEye Client SourceCode

    JavaEye Client SourceCode是一个开源项目,专为Android平台设计,提供了JavaEYE的客户端实现。这个项目的源代码为我们提供了一个深入了解Android应用开发以及Java编程在移动设备上的实践的宝贵资源。接下来,我们将...

    自己仿照javaeye写的jspf分页(原创)

    自己仿照javaeye写的jspf分页(原创),请各位多多指教

    JavaEye3.0开发手记

    ### JavaEye3.0开发手记之开发环境搭建详解 #### 一、开发环境搭建概述 随着JavaEye3.0开发计划的启动,本篇文章将详细介绍如何为该项目搭建高效的开发环境。开发过程中不仅需要考虑软件的选择,还需要针对操作...

    JavaEye新闻月刊_-_2009年3月_-_总第13期

    JavaEye新闻月刊2009年3月第13期内容涉及了当时软件开发领域内的一系列重要话题,包括IBM拟收购Sun Microsystems公司的新闻报道、Java社区对此的看法以及各种编程语言、开发工具和技术的新动态。 首先,新闻月刊...

    javaeye论坛小测试答案

    javaeye 论坛小测试 javaeye论坛小测试答案 javaeye论坛测试答案 这下你们就省事了。

    android javaeye客户端

    Android JavaEye客户端可能使用自建的评论系统或集成第三方服务如Disqus,提供用户发表观点、回复他人评论的功能。同时,登录、注册、个人资料管理等功能也是必不可少的。 总结,Android JavaEye客户端的开发涉及了...

    javaeye代码高亮插件

    然而,当你试图在WordPress中寻找与JavaEye类似的代码高亮插件时,可能并未找到完全匹配的解决方案,因此你决定将JavaEye的代码高亮功能提取出来并应用到自己的WordPress站点上。 在你提供的压缩包文件中,我们可以...

    javaeye api [java httpclient版] 简单封装

    JavaEye API 的简单封装主要基于 Java 的 HttpClient 库,提供了更方便、易用的接口来执行 HTTP 请求。HttpClient 是一个成熟的 Java 库,用于执行 HTTP 协议的客户端请求,而 JavaEyeClient 则是对这个库进行了一层...

    javaeye 基于android客户端

    JavaEye是一个基于Android平台的应用程序,它展示了在移动设备上构建功能丰富的软件的可能性。这个小应用旨在为开发者提供灵感和指导,帮助他们更好地理解和实践Android应用开发。让我们深入探讨一下这个应用背后的...

Global site tag (gtag.js) - Google Analytics