三、Web2.0安全评估面临的挑战
在Web2.0这个异步的框架中,Web应用不再需要以前那么频繁的页面刷新和重定向,这样,一些原本能够被利用的服务器资源被隐藏了起来。以下是安全研究人员在理解Web2.0应用时面临的三个重要的挑战:
(1)发现隐藏的调用:当浏览器载入的页面的XHR调用发生时,如何能够及时准确地发现它,是很大的挑战。
(2)网络爬虫问题:传统的网络爬虫应用无法应付浏览器中页面的所有行为,当页面通过JavaScript调用XHR对象从服务器获得资源时,传统的网络爬虫无法抓取到这些资源。
(3)调用逻辑发现:Web2.0的应用通过JavaScript加载,对一个特定的事件,很难分离出它的调用逻辑,因为每个html页面都会从服务器加载三到四个JavaScript脚本文件,每个JavaScript文件里又有很多函数,而当一个事件发生的时候,很难去判断是哪些JavaScript文件中的哪些函数被调用。
我们需要研究出一套方法和工具,在Web应用安全评估中克服以上障碍。这篇文章的目的,正是介绍如何使用Firefox浏览器及其一些插件,来应对上述挑战。
3.1发现隐藏的调用
Web2.0的应用可能只从服务器下载一个页面,但通过几次XHR对象调用,来构建最终的页面。这些XHR调用异步的从服务器下载资源或者JavaScript脚本。这样,我们面临的挑战就是如何判断发生的XHR调用和识别从服务器下载的资源。这些资源可以帮助安全研究人员发现安全漏洞。让我们从一个简单的例子开始。
假设我们可以通过访问站点hxxp://example.com/news.aspx ,来了解当天的商业新闻。页面的截图如图2所示。

图2 一个简单的新闻显示页面
作为一个Web2.0的应用,Ajax调用通过XHR对象被发往服务器。我们可以通过一个工具Firebug来识别所有的XHR对象调用。Firebug是Firefox浏览器的一个插件,在用户浏览一个页面之前,先把“Show XMLHttpRequests”选项选中,如图3所示。

图3 配置Firebug记录XMLHttpRequests调用
启用截获XMLHttpRequest调用的选项后,我们再次浏览这个页面,这时页面向服务器发送的所有XHR对象调用都会被Firebug发现并记录下来,具体如图4所示。

图4 记录Ajax调用
我们观察图4中的“Ajax Calls”,可以看到浏览器通过XHR发送的一些请求,从服务器下载dojo Ajax框架,与此同时,向服务器发送一个调用,获取新闻文章的内容。
如果我们仔细查看代码,可以发现如下JavaScript代码:
function getNews()
{
var http;
http = new XMLHttpRequest();
http.open("GET", " getnews.aspx?date=09262006", true);
http.onreadystatechange = function()
{
if (http.readyState == 4) {
    var response = http.responseText;
    document.getElementById('result').innerHTML = response;
        }
}
http.send(null);
}
上述代码发送一个异步的调用访问Web服务器,企图获取的资源是:
getnews.aspx?date=09262006
这个aspx页面经过编译后传给客户端浏览器。其代码放在ID为result的标签所在处。这是一个典型的使用XHR对象进行的Ajax调用的例子。
通过借助Firebug进行分析,我们可以记录一个页面所有XHR对象调用,从而发现有安全漏洞的内部URL、查询字符串和POST请求。仍然以上面的代码为例,参数date的值如果处理不当,就可能存在SQL注入漏洞。
3.2网络爬虫问题及浏览器仿真
在评估一个Web应用安全性时,一个重要的工具是网络爬虫。网络爬虫功能是爬下该Web应用中的每个网页,搜集其中的链接。但是在Web2.0的应用中,这些链接往往都指向JavaScript函数,再由JavaScript函数通过XHR对象调用新的页面内容,这时,网络爬虫会丢失这些信息。例如,下面是一个简单链接的集合。
go1
go2
go3
“go1”链接被点击时,getMe()函数被执行,getMe()函数的代码如下所示。这个函数可能在一个单独的JavaScript文件中实现。
function getMe()
{
var http;
http = new XMLHttpRequest();
http.open("GET", "hi.html", true);
http.onreadystatechange = function()
{
   if (http.readyState == 4) {
    var response = http.responseText;
    document.getElementById('result').innerHTML = response;
   }
  }
http.send(null);
}
上面的代码执行后,发送一个HTTP Get请求,访问服务器上的资源hi.html。
可否使用自动化机制仿真这个点击链接的操作呢?Firefox插件Chickenfoot为我们实现了这个功能,它提供了基于JavaScript的API,扩展了浏览器的可编程接口。
使用Chickenfoot这款插件,可以自己编写简单的JavaScript代码来使得浏览器的行为自动化。使用这种方法,像爬虫抓取网页这样简单的任务就可以自动完成了。例如下面的示例代码,可以模拟点击事件把网页上所有连接都点击一遍。这款插件与传统的网络爬虫相比,优势显而易见:所有这些onClick事件都会产生一个XHR调用,而这些响应会被传统的网络爬虫忽略,传统的爬虫只能试图去分析JavaScript代码,搜集可能的链接,但这并不能取代实际onClick事件的响应。
l=find('link')
for(i=0;i
读者可以把这段脚本加载到Chickenfoot控制台,然后运行。结果如图5所示。

图5 使用Chickenfoot仿真onclick事件
这种方法,可以创建JavaScript脚本,在Firefox浏览器内部评估基于Ajax的Web应用的安全性。

转载于:https://www.cnblogs.com/godjiahui/archive/2007/07/24/829987.html

使用 Firefox攻击Web2.0应用(二)相关推荐

  1. 使用 Firefox攻击Web2.0应用(一)

    一.引言 Ajax和交互式的Web Services正撑起Web2.0应用的大梁.技术的革新也给这项应用带来了新的安全挑战. 本文介绍了一些方法.工具和技巧,来研究Web2.0应用中面临的安全问题,介 ...

  2. 前车之鉴-web2.0网站架构失败案例与解决方案

    当互联网吵吵嚷嚷的进入2.0时代,当互联网的技术不再是那么高不可攀,当复制变成家常便饭,互联网热闹起来了 myspace火了,中国冒出更多的myspace youtube刚刚起来,中国的视频网站就遍地 ...

  3. 运用比较纯的CSS打造很Web2.0的按钮

    警告:如果你在使用IE浏览此文,那么请回避一下吧! 什么,你用的还是IE6?你真奥特曼(推荐你去打小怪兽)! 先上图,所谓有图有真相. 如果您觉得图片上这些按钮不够2.0,那没办法,请回避吧! 从图片 ...

  4. 大型Web2.0站点构建技术初探一

    来至 书客网www.8211.cn 一. web2.0网站常用可用性功能模块分析 二. Flickr的幕后故事 三. YouTube 的架构扩展 四. mixi.jp:使用开源软件搭建的可扩展SNS网 ...

  5. 使用 WebSphere Portlet Factory 构建基于 Web2.0 的灵活 SOA 前端

    在许多门户的项目中,客户对门户的使用体验都有非常高的要求.基于现阶段的 portlet 技术对丰富的 Web 2.0 前端展现存在着一定的技术难度.WebSphere Portlet Factory ...

  6. [转载]大型Web2.0站点构建技术初探

    一. web2.0网站常用可用性功能模块分析 二. Flickr的幕后故事 三. YouTube 的架构扩展 四. mixi.jp:使用开源软件搭建的可扩展SNS网站 五. Technorati的后台 ...

  7. Web2.0规模涌现 首届Web2.0十大创新品牌揭晓

    本次评选于2006年8月1日正式启动,由<财经时报>.<财经文画>主办,新浪.搜狐.网易.腾讯网.TOM在线.雅虎中国.赛迪网.天极网.硅谷动力.千龙网.和讯.猫扑.中华网.M ...

  8. hiei乱谈系列:全面评述Web2.0

     一.综述 Web2.0 铺天盖地而来,各路媒体伦向轰炸,Web2.0 的时代已经到来,你准备好了吗?                                                  ...

  9. [转]WEB2.0中AJAX应用的详细探讨

    最近互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一.AJAX是Asynchronous JavaScript and XML 的缩写.它并不是一门新的语言或 ...

最新文章

  1. 关于php抓取页面信息的简单代码
  2. 阿里Java编程规约(控制语句)
  3. POJ 2709 Painter 【贪心算法】
  4. 3种云桌面(VDI、IDV、VOI)技术解决方案简介
  5. 信号与系统——初识到理解(第一章 ——概述)
  6. java 调查问卷_java学习调查问卷
  7. php懂erp是什么意思,ERP是个什么鬼,这里的讲解通俗易懂
  8. 实验六:熟悉Hive的基本操作
  9. 2023年武汉市中等职业学校技能大赛 “网络搭建与应用”
  10. P2135 方块消除
  11. linux状态栏显示命令,Ubuntu状态栏显示网速CPU
  12. 笔记本电脑连接显示器如何让笔记本电脑单纯作为一台主机进行使用/笔记本连接显示器以后只需要显示器进行显示的操作! 2021/1/16
  13. linux命令行下的tab键作用
  14. 基于mycncart开发PHP在线定制商城网站源码
  15. Google Protocol Buffers三两事【知识笔记】
  16. ue4超级跳、do once、技能冷却时间
  17. 计算机微课论文参考文献,教学教师论文,关于新计算机技术在微课领域的应用相关参考文献资料-免费论文范文...
  18. 视频教程-物联网嵌入式开发之STM32 和 RT-thread-物联网技术
  19. signature=06a4313dd87c1b3dd1775e5b7855fa80,Hole capture by D‐center defects in 6H‐silicon carbide...
  20. 录音转文字app有哪些?可以试试这几款录音转文字助手

热门文章

  1. MYsql 查询 查询当前月份的数据
  2. python模块导入
  3. 【Unity】12.5 Navmesh Obstacle组件
  4. Nginx配置中文域名
  5. A simple Test Client built on top of ASP.NET Web API Help Page
  6. sota如何创建作业及配置作业文件详解(章节5)
  7. Ubuntu 12.10 安装 PHP
  8. 在Websphere AppServer 5.1中配置数据源
  9. android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
  10. 石家庄地铁售票系统源码及截图(结对作业)