首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
ASP | ASP.NET | JSP | PHP | AJAX | XML | Java script | HTML/CSS | 服务器类
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> WEB开发 >> AJAX学习教程 >> 正文
AJAX真的不安全?

作者:cleverpig

image


版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:cleverpig
原文:http://www.matrix.org.cn/resource/article/2007-02-07/a5f2d5c6-b677-11db-82df-078095a5dcde.html
关键字:AJAX,安全,XSS,CSRF,漏洞

前言

        日前网络中流行围绕AJAX和安全风险的讨伐声浪让人不绝于耳。这种火热的新技术已经被铺天盖地地应        用在各种web应用(构建如Gmail、Google Maps这些基于web的应用),但在其炙手可热的光环背后隐藏着一个黑暗的鬼怪——AJAX正在为心怀恶意的hacker打开着后门。但这并不完全正确。恰好,目前几乎所有的web应用开发老手和安全专家都正在力图冲过冷嘲热讽式的取笑,触及到事情的真相:多数web站点都是不安全,但AJAX并不是罪魁祸首。尽管AJAX不能使web站点变得丝毫安全,但理解它能做些什么是非常重要的。

        AJAX(Asynchronous JavaScript + XML)是web浏览器技术的集合体,它允许web页面内容飞速地更新而无需刷新页面。在使用AJAX的web页面背后,数据(通常格式化为XML,但也可以是HTML、JavaScript等格式)在web服务器与客户端浏览器之间来回传输。比如在Gmail应用场景中,新的邮件信息被自动接收和显示。在Google Maps应用场景中,用户可以通过鼠标拖拽的方式在地图中的街区之间穿梭漫游。这种执行异步数据传输的机制是一个嵌入在所有现代web浏览器内部的、被称为XMLHTTPRequest(XHR)的软件库。XHR是web站点获得“AJAX”商标的关键。另一方面,它也是一些实现了“奇思妙想”的JavaScript。

        如果你正在思考这究竟和安全有什么关系,那么你是正确的。AJAX技术使站点平滑地与用户交互,并给用户带来更多的回应。而在web服务器上并没有任何改变,而安全焦点却应该着重在web服务器端。如果这是事实的话,那么我们每个人还考虑什么?在计算机安全社区中,AJAX意味着大量攻击平面(attack surface)、骤增的复杂性、伪造请求、拒绝服务、跨站脚本(XSS)、依赖于客户端安全等等。而事实上,这些问题在AJAX出现之前就已经存在。并且推荐给开发者的安全最佳实践也从没有因为AJAX的出现而改变过。如果你像我一样想知道到底哪些才是重要的,那么请让我们进行一次深入的讨论。

名词解释

       Cross-site scripting (XSS):跨站脚本是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞越过访问控制——例如同源策略(same origin policy)。近来,这种类型的漏洞被用来编写危害性更大的phishing攻击和利用浏览器漏洞。

       Same Origin Policy:计算机术语。这里译为“同源策略”。它是对于客户端脚本(尤其是JavaScript)的重要安全 度量标准。它首先出自Netscape Navigator2.0。之后历经Navigator2.01和Navigator2.02的修正完善。其目的在于防止某个文档或者脚本从多个不同 “origin”(源)装载。 这里的单词“origin”指使用域名、协议、端口。

       Cross-site request forgery(CSRF):跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

AJAX导致大量的“攻击平面”?——不!

        “攻击平面”一词被应用到通过对系统中开放攻击点的分析来度量安全的概念中。对于软件,这些点便是被第三方(用户)操作数据输入、输出的区域。显而易见,具有相对越少的安全平面使应用越安全。同样明显的是,对于web应用或者任何应用,编写的功能点与攻击平面同样多。这并不和用户接口是否采用AJAX、Flash、ASCII艺术字或者其它任何方式有关。AJAX是一种浏览器技术,且不在服务端执行。当AJAX驱使开发者公开地暴露更多的功能时,便可能引入新的“服务器端”漏洞——你并不能责备AJAX。新的代码总意味着增加漏洞的风险。

        更进一步讲,从本人的经验看,使用AJAX技术的web应用在功能上并不具有比传统的标准web应用更多的复杂性。Google Maps就是一个比看似简单的craigslist的更简练的应用。Gmail也比Outlook Web Access更加轻巧。而且,使用AJAX进行Web应用设计(或者重新设计)将给在使用新式平台上(.NET,J2EE等)进行开发带来更多的机会。这些平台与生俱来就更加安全、不会出现例如SQL注入、证书会话推算(Credential Session Prediction)、目录遍历等在上一代平台中常见的漏洞。

AJAX使“攻击平面”更加难以发现?——是,但又不是

        没有测试结果的安全程序是不完整的。度量web站点安全的最常见方式便是通过模拟攻击——成千上万的攻击(也就是漏洞评估)。漏洞评估能被手工执行,也可以使用自动化扫描工具,或者两者兼而有之。在漏洞评估过程的第一步就是定位web应用的输入点或者“攻击平面”。因此,一个完整的漏洞评估需要发现所有可能的漏洞。

        自动化抓取整个web站点、映射链接是漏洞评估的标准行为。此方法对于某些站点工作很好,对另一些站点则无能为力,而对其余站点的效果在前两者之间。对使用大量JavaScript、Flash、ActiveX、Applet和AJAX的新式站点来讲,进行漏洞评估的挑战是网站中的链接是即时生成或者在复杂的客户端代码中动态生成的。分析出这些链接非常困难,有时几乎不可能。因此自动化扫描成为了检验AJAX站点安全性的一种不大可靠的方法。

        另一方面依靠人工可以相对轻松地详细审视代码并推断代码之间的关系。有时,JavaScript源代码中记录了web站点所有的输出区域,甚至XML web服务的细节,当然这不但对心怀善意者有用,而且对心存恶意者也同样有用处。

        在一个平常的web站点中,没有这样的资源,而漏洞评估程序必须依赖于链接抓取的方式。因此这里做出的结论便是:AJAX并没有削弱web站点的安全性,但它使评估安全工作面临更多的挑战。

[1] [2] [3] 下一页

中国IT教育热线咨询
相关文章
ajax制作网页右下角弹出提示效果
Ajax,未来的WebServices?
在c#中如何调用ajax进行开发
探讨:利用AJAX技术提高搜索引擎排名
Ajax的错误处理机制探讨
最新文章
·PHP正则表达式从url中取得域名
·php设计模式介绍之迭代器模式
·简单学习php遇到的主要问题
·asp根据表单自动生成sql语句的函
·雅虎选项卡特效
 文章评论

 精彩友情推荐
·Asp源码 PHP源码
·CGI源码 JSP源码
·建站书籍教程
·服务器软件 .net源码
·建站工具软件
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
ASP.NET ASP PHP JSP
·extjs ComboBox联动下拉菜单示例08-01
·漫谈.Net开发关于命名空间和目录划分07-31
·在Silverlight应用程序中操作Cookie07-28
·带附加条件的NewID()用法(downmoon)07-28
·对自定义路由进行单元测试07-28
·javascript实现yield07-28
·在ASP.NET中使用Google Maps07-28
·Sql Server2005 实现Oracle10g的hash表分区功07-28
·asp.net get set用法07-26
·Asp.net 控件开发—数据回传07-26
·接口vs. 的实体类07-26
·php设计模式介绍之迭代器模式08-02
·简单学习php遇到的主要问题08-02
·asp根据表单自动生成sql语句的函数08-02
·教你优化你的ASP程序03-07
·asp去除HTML标记的三个实用函数03-07
·ASP添加验证码的解决方法03-07
·ASP通用文章分页函数:非记录集分页03-07
·ASP教程基础:十天学会ASP第三天03-07
·ASP教程基础:十天学会ASP第二天03-07
·ASP教程基础:十天学会ASP第一天03-07
·能够生成google xml地图的asp源码03-06
·Linux系统下让PHP提高性能的工具APC05-06
·一个完整、安全的PHP用户登录系统11-14
·Apache+PHP+MySQL建立数据库驱动的动态网站08-24
·用SSH与PHP相连接 确保数据传输的安全性08-23
·PHP5手动最简安装方法08-03
·PHP程序加速探索之服务器负载测试07-11
·完全讲解PHP+MySQL的分页显示示例分析05-30
·用Suhosin加强PHP脚本语言安全性05-26
·初学入门 PHP 和 MySQL05-17
·传奇的诞生 PHP三位创始人简介05-10
·大型系统上PHP令人不爽的九大原因05-10
·ASP.NET和PHP、JSP究竟学哪个?07-30
·JAVA (Jsp)利用Google的Translate开发API07-29
·由Servlet获得FacesContext及ManagedBeans07-24
·用JOTM向Servlet中添加事务07-18
·用servlet生成验证码07-16
·JSP/Servlet伪静态网页实现07-08
·JSP和Servlet的关系浅谈06-15
·妙用异步Servlet扩展AJAX应用程序06-11
·servlet生成验证码图片06-02
·java.servlet.Filter的应用05-30
·Java程序员必看--扩展鼠标右键菜单功能05-13
  培训中心
人才交流中心 技术交流中心
  ITLab技术交流平台: