技术开发 频道

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



    使用AJAX框架
    保护你的站点免受JavaScript劫持的一个方法是使用AJAX框架。据统计显示,有四分之一的AJAX用户创建他们自己的专有AJAX结构。然而这种情况是令人担忧的,因为一些未受过系统教育的开发者将会把AJAX安全漏洞带带他们的应用程序中,使得这些应用程序很容易遭到黑客的攻击。因此,最好的办法是从众多的AJAX框架中选择一个。那么我们或许会问这样一个问题:哪一个AJAX框架可以很好的处理安全漏洞呢?

    Fortify软件曾进行过这种类型的调查。他们发现DWR 2.0是目前唯一可以防止JavaScript劫持的框架。诸如Dojo、GWT、Prototype和Script.aculo.us等框架正在准备在即将推出的版本中增加对JavaScript劫持的防护。以上框架所创建的抽象级别允许开发者不用自己去关注漏洞防护细节。而且,即使你所选择的框架现在不能解决这些安全漏洞,可能明天它就会解决了。这意味着你可以不用修改你的专有代码,只需升级到最新版的框架即可。

    拒绝恶意请求
    如果你决定不是用已有框架,而是创建自己的AJAX结构,也是有方法可以保护你的应用程序免受AJAX劫持攻击的,这就是附加一个不容易猜到的参数到每一个到服务器的请求。一种办法是增加一个会话cookie到请求中,并在服务器上检查这个cookie的值,假若这两个值是匹配的,这个请求则被认识是允许的。

    下面的代码是一个例子:

<script>
function sendRequest() {
var req = new XMLHttpRequest();
var cookie = "cookie="+escape(document.cookie);
req.open("POST", someUrl, true);
req.send(cookie);
}
</script>

    防止响应的直接执行
    AJAX劫持是基于这样一个原则:响应对象可以从恶意网站中的<script>标记中直接执行。Fortify软件提出了两种方法,来防止来自恶意站点的响应对象的直接执行。

    1、增加while循环表达式作为每一个响应文本对象的前缀。这种方法根据响应对象将客户端(和一个黑客站点)置于一个无限循环中。以下是移除了前缀while(1)的代码。

If (request.readyState == 4) {
var txt = req.responseText;
If (txt.substring(0,9) == "while(1);")
txt = txt.substring(10);
}

    注:给响应对象增加一个后缀也是可以的。

    2、在JSON表达式前后增加注释字符。客户端在评测响应对象前必须移除这些注释字符。以下是示例代码。 
     If (request.readyState == 4) { var txt = req.responseText; If (txt.substring(0,2) == "/*") txt = txt.substring(2,txt.length - 2); }

    结论
    以上我们讲到了AJAX安全漏洞被利用的几种方式,我们或许会问自己这样一个问题:这种攻击的可能性有多大?为了让JavaScript劫持生效,用户必须被欺骗加载具有恶意代码的网页。我感觉这种情况并不容易发生。但是,我不是一个黑客,而且也不是一个IT安全方面的专家,因此我很难给出一个确切的答案。我唯一可以断定的是,威胁确实存在,不过似乎通过一些简单的办法我可以保护自己。

0
相关文章