Ajax安全指导:用好的架构和更安全的API防御攻击

日期: 2007-12-30 作者:Colleen Frye 来源:TechTarget中国 英文

Andrew van der Stock,他写了开放 Web 应用安全项目(OWASP)指南中关于Ajax 的新的章节,这一指南是为了构建安全Web服务,因此,本文主要讨论如何预防Ajax应用受到攻击。   Andrew van der Stock,他写了OWASP 指南中关于Ajax的新的章节,这一指南是为了构建安全Web服务,因此,本文主要讨论如何预防Ajax应用受到攻击。   你写到在使用Ajax时需要仔细考虑架构、服务器端访问控制、状态管理以及严格验证。我们已经讨论了架构。

那么你可以谈论一下服务器端的访问控制么?以及它是如何帮助Ajax安全的呢?   Andrew van der St……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

Andrew van der Stock,他写了开放 Web 应用安全项目(OWASP)指南中关于Ajax 的新的章节,这一指南是为了构建安全Web服务,因此,本文主要讨论如何预防Ajax应用受到攻击。

  Andrew van der Stock,他写了OWASP 指南中关于Ajax的新的章节,这一指南是为了构建安全Web服务,因此,本文主要讨论如何预防Ajax应用受到攻击。

  你写到在使用Ajax时需要仔细考虑架构、服务器端访问控制、状态管理以及严格验证。我们已经讨论了架构。那么你可以谈论一下服务器端的访问控制么?以及它是如何帮助Ajax安全的呢?

  Andrew van der Stock说:访问控制是由以下这几个组件所组成的:

  身份验证(authC)——你是谁?
  授权(authZ)——你有足够的权限做某件事情么?
  审核——对所有访问的登录进行安全保护,以便及时确定稍候会进行什么操作
  身份验证的强度是与初始身份和凭证类型(口令、令牌等)这些因素直接相关的。显而易见,如果事务处理的级别越高或者说受攻击的风险越高,那么需要验证的程度也就越强。强验证需要服务器端的基础架构,比如访问控制服务器或者智能卡的PKI。

  授权是关键。许多应用程序的授权模型性能很差,缺少任何授权验证,以至于允许调用程序去执行那些有特权限制的操作。如果一个Ajax应用程序使用客户端授权,那么就可以在一定程度上预防攻击,尤其是在没有服务器端控制的时候。攻击者只能够改变或者删除在磁盘操作监督程序(DOM)中的授权代码以及与安全有关的令牌,比如一个admin标记。

  对Ajax应用程序而言,唯一的安全方式就是使用服务器端的authC/authZ验证和审核。如果存在Ajax路径和普通Web 应用路径这两种路径的话,那么采用服务器端验证审核的方式,就是对任何一种路径都不进行优先处理,并且是在服务器端对安全进行维护而不是这两个地方分别进行。

  关于状态管理和客户端的安全状态存储,开发人员需要知道的哪些知识呢?

  van der Stock说:客户端没有安全状态这样的概念。每次收到服务器端的数据时,你都必须进行重新验证。开发人员不应该向客户端传送敏感数据,比如授权令牌、数据库口令或者访问级别,除非目的就是为了显示这些信息。返回这样的敏感数据更是个糟糕的方法,因为如果不先通过验证的话,返回永远无法被执行。

  最后,发送所有数据就变得越来越通用。

  强验证是由哪些内容组成的呢?

  van der Stock说:大多数用户不会故意和你过不去,但是有些会。强验证包括:

  对于字符串: 最大长度以及对可允许的字符的筛选。
  对于整型数字:验证范围和符号。通常,缺省情况是使用“unsigned int”而不是“int”。
  对于数组,比如下拉列表和radio组,使用简单的数值("1".."2".."3") 作为选择项而不使用数据本身。这种情况下的完善的例子包括:含有信用卡号码的下拉列表菜单。不要使用信用卡号码作为返回值。因为这样会导致对号码的直接篡改。取而代之的是,选择时采用简单索引值(1, 2, 3, 等)或者使用账户号码的一部分作为显示选项。
  对于复选框和布尔型值:强制只有true或false选项。
  创建可以被验证的新复合类型,比如Zip代码等,这是由于regex类自带的语法规则。
  否定验证与病毒定义的原理非常相似。要保持与新的攻击方法同步是很困难的。在过去的大约20年内,采用黑名单这种方法来保护信息资源确实不断的遭遇很严重失败。开发人员对采用黑名单方法说“不”,这一点是至关重要的。

  筛选是唯一的可能安全的验证方法。采用黑名单(否定验证)进行常规检查可能会导致接受某些恶意输入,因此,采用测试并且阻止数据的方式要好得多。

  你上面着重讲述的步骤可以使Ajax开发人员领先于黑客么?

  van der Stock说:通过做这些基础工作——数据验证、好的架构、更安全的API(没有理由对SQL入侵)等等,你的程序就正在被很好地保护。那些恶意的开发者都是机会主义者,假如在你的应用程序上开发一个简单的攻击程序要比在别人的程序上多花20倍的时间的话,那么攻击者肯定会把别人的应用程序当攻击目标。我可以毫不虚伪地说:没有一个应用程序是“安全的”。这就是为什么防攻击者如此艰难的原因——我们必须防止任何攻击,而且我们到现在为止还没有预算和时间来针对每一个漏洞写测试代码,包括现在已知的潜在漏洞或者是还没有被发现的漏洞。

  许多开发人员完全没有意识到他们需要学习这些知识。参与OWASP本地章节写作的人员已经是我们这个事业的皈依者了,而且他们知道的知识可能比我还多。相反,我倒很想与业务人员——创造新软件的架构师和工程师们——进行探讨。他们是重要的可启发的生力军,他们也是我们这个事业的皈依者。

  安全研究人员,比如我,做的基础性研究比那些黑客多,但是黑客在广泛应用的软件上找到漏洞就可以获得很高的报酬。他们和我们使用相同的技术来识别并利用这些漏洞,某些情况下还会创建自己的程序区——SAMY蠕虫病毒就是一个例子。

  我希望更多的Ajax的脆弱性和使用上的问题能够显现出来,而且我也希望研究人员能够找出更多“新的”需要被保护的漏洞。不是这些漏洞不存在,而是我们还没有发现并描述它们。希望我们能够在那些零时攻击者之前先找到这些漏洞。我们的研究以及开发人员能够——或者更有可能,无法——对一个安全的应用程序实现必要的控制,这两者之间是有时间延迟的。

  Andrew van der Stock是澳大利亚Web 应用程序的主要研究人员。他是webappsec的仲裁者,曾经帮助组织墨尔本地区OWASP 章节。Van der Stock正在带领编写OWASP指南3.0版本——其中包括关于Ajax的新章节,该指南是为了构架安全的Web 应用程序。

相关推荐

  • 八个超实用的jQuery技巧攻略

    jQuery是JavaScript最好的库之一,主要用于制作动画、事件处理,支持Ajax及HTML脚本客户端。文中分享了8个超实用的jQuery代码技巧攻略,希望你会喜欢。

  • HTML5强大功能背后的安全陷阱

    尽管HTML5使网站的功能更为强大,但开发人员需充分利用其新的技术特征来提高网站的安全性,使用不当会带安全问题,你知道吗?

  • 前端页面开发之Node.js初学者指南

    Node.js是刚刚兴起的一个概念,你对它的了解有多少?Node.js的意义是什么,它是怎么发展起来的?Node.js的作用是怎样的呢?

  • JavaScript解析:让搜索引擎看到更真实的网页

    我们都知道期的搜索引擎没有相应的处理能力,会导致很多问题。引入JavaScript解析的目的,可以使搜索引擎可以更为清晰的了解用户实际打开该网页时看到的效果。