篇文章是关于我们探索基于Ajax的应用程序在评估过程中遇到的主要安全问题。
AJAX:
Ajax或“非同步JavaScript和XML”是一个相对较新的和动态的Web技术,其工作在异步方式与服务器进行交互。在传统的Web方法使一个新的浏览器刷新整个页面,并重新加载它,这是既耗时又耗费带宽的要求。使用AJAX,子程序可以不完全重新加载页面请求新的服务器数据,从而给用户带来更快的和丰富的体验。它发生在后台用户不知情的情况下,用户看到的是一个流畅的体验。XMLHttpRequest对象是用来与服务器的交互。Ajax请求一个简单的例子就是通过谷歌搜索提示语的人口,而我们开始打字的话。没有发送的全部内容,它不断猜测,更新和加载搜索结果没有击中搜索按钮。
在Ajax请求/响应的数据可以在XML或JSON,认为这是一种重量轻的数据传输比传统形式的基础数据。
数据泄漏在Ajax或JSON劫持:
在继续之前让我们明白一个重要的概念:
1.JavaScript表达式
2.JavaScript数组
JavaScript表达式执行的JavaScript解析器,但数组是:
列如:
这将不被执行,即对象将不会被创建。上面的例子是一个JavaScript表达式。
但现在,当它被转换成一个数组,如下面给出:
这才会被执行。
情景:
用户登录到一个脆弱的应用(victimsite.com)的服务器JSON形式的阵列和数据敏感性质。用户获取认证令牌(身份验证)的应用。
攻击者诱使用户点击一个链接,使用网络钓鱼或发送电子邮件给用户。
用户点击该链接时,页面加载,从攻击者的网站,下面的脚本嵌入:
脚本再次发出请求,victimsite.com和访问主JSON页发送敏感数据到攻击者的网页,其中有两个:现在JSON数据和身份验证令牌。
然而,上述攻击的先决条件是JSON数据必须敏感于自然和浏览器应该接受__defineSetter__方法,它覆盖了现有的DOM或函数时调用属性setter。在以上示例中,只要是被称为“t”内的属性,函数警报,并且显示它。然而,没有多少浏览器支持defineSetter,’方法。
应对措施:
切勿将敏感信息发送JSON或不给他们使用JSON数组,这使得它可以通过脚本标记有效的JavaScript。
只服务身份验证的请求,意味着使用某种形式的身份验证来保护数据
必须发送JSON数据通过POST,GET,这将使它很难在”, “phone”: “911″}]}; someObject.innerHTML(inboundJSON.people[0].address); // Vulnerable document.write(inboundJSON.people[0].address); // Vulnerable someObject.innerText(inboundJSON.people[0].address // Not Vulnerable
防御措施:
几乎是相同的,我们会做传统的XSS预防:
输入验证:严格检查什么是允许的,什么不是在用户输入。正确过滤白名单允许的字符
输出验证:这意味着,所有的输出必须正确编码,然后呈现给用户如HTMLEncoding。
结论:
因此,大部分影响Ajax的问题是那些传统的Web应用程序,他们可能同样的方式得到减轻。
本文有小安攻防研究室翻译,如有翻译和编辑错误请联系管理员,谢谢,希望本文对你有所帮助。
作者简介
Ninj@S3c是一个领先的跨国公司的安全分析师。他主要是集中在应用安全,网络安全,无线安全。除此之外,他在逆向工程和取证感兴趣。
原文地址:http://resources.infosecinstitute.com/ajax-security-issues/